python logging按時間切割日志


今天發現一個問題,之前的一個程序運行時間久了,日志文件越來越大.感覺這里可以優化一下,故上網搜索了一番.

先搬運相關知識點:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM