Tornado按天列印日誌

2shou發表於2015-02-01

網站流量上來後,日誌按天甚至小時儲存更方便檢視和管理,而Python的logging模組也提供了TimedRotatingFileHandler來支援以不同的時間維度歸檔日誌。
然而根據Logging HOWTO的官方指南設定後,卻發現新的日誌只剩下root的,Tornado內部的logger全部沒有生效。
參考stackoverflow上的一個回答,我發現下面的配置能讓Tornado內部的logger也用上TimedRotatingFileHandler

# logging.yaml

version: 1
disable_existing_loggers: false
formatters:
  simple:
    format: `%(asctime)s - %(name)s - %(levelname)s - %(message)s`

loggers:
  all:
    handlers: [all]
    propagate: false
  tornado:
    handlers: [all]
    propagate: false

handlers:
  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.log

root:
  level: INFO
  handlers: [console, all]
  propagate: true

只需在Tornado的入口程式碼處呼叫:

pythonlogging.config.dictConfig(yaml.load(open(`logging.yaml`, `r`)))
  • 如果你想按別的時間維度分割日誌,修改when引數對應的值就可以了。
  • 特別注意:當when的值是D,表示由伺服器啟動的時間計起,每過24小時歸檔一次;而如果你和我一樣,希望在每天的凌晨歸檔日誌的話,可以配置為midnight
  • Centos系統可能需要先安裝python-yaml:sudo yum install python-yaml

來自:建造者說

相關文章