Pythonログモジュールlogging rotateの穴

3679 ワード

本文の穴は、主にログでこのブロックをスクロールしています.もちろん、もしあなたのアプリケーションがずっとログを打っていて、システムの時間がずっと正しいならば、python(2.6.6)自分のログモジュールはokです.
まず現象:初期化ログが時間通りにスクロールされ、TimedRotatingFileHandler(when='D'、interval=1...)2016-05-23でcap-syncを表示する.logログのスクロール状況は、次の奇妙な現象を発見します.
ls -l
head -n 1cap-sync.log.2016-05-19
tail -n 1cap-sync.log.2016-05-19
head -n 1cap-sync.log.2016-05-20
tail -n 1cap-sync.log.2016-05-20
head -n 1cap-sync.log
tail -n 1cap-sync.log
 
total30460
-rw-rw-r-- 1 admin admin     1440 May 23 10:56 cap-sync.log
-rw-rw-r-- 1 admin admin   531572 May 20 18:34 cap-sync.log.2016-05-19
-rw-rw-r-- 1 admin admin     1330 May 23 10:56 cap-sync.log.2016-05-20

2016-05-20 09:28:40,411 - CAP-Sync - INFO - Consume has failed record in JMQ:{"action":"add","appCode":"config","ips":["10.255.255.1"]}.Put this message into retry queue
2016-05-20 18:34:16,265 - CAP-Sync - INFO - Consume OK with JMQ: {"action":"remove","appCode":"big.new","ips":["10.255.255.2"]}.

2016-05-22 21:34:40,133 - CAP-Sync - INFO - Consume OK with JMQ:{"action":"remove","appCode":"zk","ips":["10.1255.255.2"]}.
2016-05-23 10:56:56,373 - CAP-Sync - INFO - Consume OK with JMQ:{"action":"add","appCode":"service","ips":["10.255.255.1"]}.

2016-05-22 21:34:40,148 - JMQ-api - INFO - produce JMQ success! Detail Info:{"action":"remove","appCode":"zk","ips":["10.255.255.2"]}
2016-05-23 10:56:56,384 - JMQ-api - INFO - produce JMQ success! Detail Info:{"action":"add","appCode":"service","ips":["10.255.255.1"]} 

奇妙な点:
  • 21、22号ログバックアップなし
  • 19番のログには、20番のログが入っています.
  • 23号は同時にcap-syncを修正する.log.2016-05-20およびcap-sync.logファイル
  • cap-sync.log.2016-05-20およびcap-sync.logファイルにはcap-syncに記録すべきものがそれぞれ記録されている.logのログ
  • ネットで調べた既知のBUGs:
  • デフォルトpythonライブラリのlogging.handlers.TimedRotatingFileHandlerは、logger初期化フェーズでsuffixを生成しません.これにより、プログラムが再起動すると、前回起動したログが上書きされます.解決策:TimedRotatingFileHandlerを初期化した後、suffix
  • handler.suffix = "%Y-%m-%d"```

    • , + interval , , 10:00:00 , 10:00:05 , , 5s , , 。 , MIDNIGHT weekday 。
    • TimedRotatingFileHandler , 、 、 、 、 ,BUG : , ( 2012-03-15 2014-03-15), , , , ( 2012-03-15 2010-03-15), : , 。 , logging , :\lib\logging\handlers.py, , ,


    Addhandler, , a.py import b , logger handler,
    a.py logger , handler。

    1. rotate , N (N logger )
    2. Rotate ,
      , ,

    1. get_logger
    2. rotate, midnight
    3. global_logger.py ,addhandler handler :
        if not len(logger.handlers):
            logger.addHandler(handler)
    


    http://stackoverflow.com/questions/6333916/python-logging-ensure-a-handler-is-added-only-once