Pythonログモジュールlogging rotateの穴
3679 ワード
本文の穴は、主にログでこのブロックをスクロールしています.もちろん、もしあなたのアプリケーションがずっとログを打っていて、システムの時間がずっと正しいならば、python(2.6.6)自分のログモジュールはokです.
まず現象:初期化ログが時間通りにスクロールされ、TimedRotatingFileHandler(when='D'、interval=1...)2016-05-23でcap-syncを表示する.logログのスクロール状況は、次の奇妙な現象を発見します.
奇妙な点: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
まず現象:初期化ログが時間通りにスクロールされ、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"]}
奇妙な点:
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。
:
- rotate , N (N logger )
- Rotate ,
, ,
:
- get_logger
- rotate, midnight
- 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