今天發現一個問題,之前的一個程序運行時間久了,日志文件越來越大.感覺這里可以優化一下,故上網搜索了一番.
先搬運相關知識點:
logging 中常用的日志處理方法和類
1. StreamHandler:logging.StreamHandler,日志輸出到流,可以是sys.stderr,sys.stdout或者文件,這個方法通常用來將日志信息輸出到控制台
2. FileHandler:logging.FileHandler,日志輸出到文件,指定文件,將日志信息寫入到文件中
3. BaseRotatingHandler:logging.handlers.BaseRotatingHandler,基本的日志輪轉方式,這個類是日志輪轉的基類,后面日志按時間輪轉,按大小輪轉的類都繼承於此。輪轉的意思就是保留一定數量的日志量,如設置保持7天日志,則會自動刪除舊的日志,只保留最近7天
4. RotatingHandler:logging.handlers.RotatingHandler,繼承BaseRotatingHandler,支持日志文件按大小輪轉
5. TimeRotatingHandler:logging.handlers.TimeRotatingHandler,繼承BaseRotatingHandler,支持日志文件按時間輪轉
6. SocketHandler:logging.handlers.SocketHandler,遠程輸出日志到TCP/IP sockets
7. DatagramHandler:logging.handlers.DatagramHandler,遠程輸出日志到UDP sockets
8. SMTPHandler:logging.handlers.SMTPHandler,遠程輸出日志到郵件地址
9. MemoryHandler:logging.handlers.MemoryHandler,日志輸出到內存中的指定buffer
10. HTTPHandler:logging.handlers.HTTPHandler,通過"GET"或者"POST"遠程輸出到HTTP服務器
TimedRotatingFileHandler 的主要參數:
1. filename: 指定日志文件的名字,會在指定的位置創建一個 filename 文件,然后會按照輪轉數量創建對應數量的日志文件,每個輪轉文件的文件名為 filename 拼接時間,默認YY-mm-DD_HH-MM-SS,可以自定義。
2. when: 指定日志文件輪轉的時間單位
S - Seconds
M - Minutes
H - Hours
D - Days
midnight - roll over at midnight
W{0-6} - roll over on a certain day; 0 - Monday
3. interval: 指定日志文件切割時間,如 when='S', interval=60,表示每60秒日志切割一次,when='D', interval=1,表示每天切割一次。
4. backupCount: 指定日志文件保留的數量,指定一個整數,則日志文件只保留這么多個,自動刪除舊的文件。
最后附上我的源碼:
import logging
from logging.handlers import TimedRotatingFileHandler
def set_log(filename):
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
file_format = logging.Formatter('%(asctime)s Line%(lineno)d [%(levelname)s] %(message)s')
time_handler = TimedRotatingFileHandler(filename=filename, when='D', interval=1, backupCount=7)
time_handler.setLevel(logging.INFO)
time_handler.setFormatter(file_format)
logger.addHandler(time_handler)
參考: https://www.cnblogs.com/xianyulouie/p/11041777.html
參考: https://blog.csdn.net/weixin_43790276/article/details/101944628
