實際應用中遇到TimedRotatingFileHandler不滾動的問題,

來源:互聯網
上載者:User

實際應用中遇到TimedRotatingFileHandler不滾動的問題,

需求:

程式每天晚上8點和10點定時運行,期望日誌按日期記錄

添加Handler部分代碼如下:

formatter = logging.Formatter("%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s", "%Y-%m-%d %H:%M:%S")log_file_handler = logging.handlers.TimedRotatingFileHandler(filename="loaddata.log", when="D", interval=1, backupCount=30)log_file_handler.setFormatter(formatter)logging.getLogger().addHandler(log_file_handler)

查看過很多資料,代碼並沒有問題

現象:

只有一個日誌(loaddata.log)檔案被產生,其中會有所有天的日誌,期望的loaddata.log.YYYY-mm-dd並沒有看到

研究:

追查代碼,看到handlers.py(Python內建模組)中是這樣計算記錄檔重建時間的

下面的 result 是下一次rollover的時間,上面的 t 是handler初始化時擷取的起始時間。

可以看到logging模組得到的結果是這樣的:

  • 起始時間 = 記錄檔的最後修改時間
  • 下次滾動時間 = 起始時間 + 1天(因為我設定的when='D')

又因為,我每天要在20點和22點各執行一次,並且每次都有日誌寫入。因此:

  • 20點執行時,起始時間 = 昨天晚上22點;下次滾動時間 = 昨天22點 + 1天 = 今天22點。所以不滾動
  • 22點執行時,起始時間 = 今天20點;下次滾動時間 = 今天20點 + 1天 = 明天20點。所以不滾動

所以:導致的結果就是。。。永遠不滾動!/(ㄒoㄒ)/~~

解決辦法:

建立Handler時,把when='D'改成when='MIDNIGHT'可解決這個問題。因為MIDNIGHT指的是,只要過了0點就會滾動。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.