網站流量上來後,日誌按天甚至小時儲存更方便查看和管理,而Python的logging模組也提供了TimedRotatingFileHandler來支援以不同的時間維度歸檔日誌。
然而根據Logging HOWTO的官方指南設定後,卻發現新的日誌只剩下root的,Tornado內部的logger全部沒有生效。
參考stackoverflow上的一個回答,我發現下面的配置能讓Tornado內部的logger也用上TimedRotatingFileHandler:
# logging.yamlversion: 1disable_existing_loggers: falseformatters: simple: format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'loggers: all: handlers: [all] propagate: false tornado: handlers: [all] propagate: falsehandlers: console: class: logging.StreamHandler level: INFO formatter: simple stream: ext://sys.stdout all: class: logging.handlers.TimedRotatingFileHandler level: INFO formatter: simple when: midnight filename: ./logs/server.logroot: level: INFO handlers: [console, all] propagate: true
只需在Tornado的入口代碼處調用:
logging.config.dictConfig(yaml.load(open('logging.yaml', 'r')))
- 如果你想按別的時間維度分割日誌,修改when參數對應的值就可以了。
- 特別注意:當when的值是D,表示由伺服器啟動的時間計起,每過24小時歸檔一次;而如果你和我一樣,希望在每天的淩晨歸檔日誌的話,可以配置為midnight。
- Centos系統可能需要先安裝python-yaml:sudo yum install python-yaml