網站流量上來後,日誌按天甚至小時儲存更方便檢視和管理,而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的入口程式碼處呼叫:
python
logging.config.dictConfig(yaml.load(open(`logging.yaml`, `r`)))
- 如果你想按別的時間維度分割日誌,修改
when
引數對應的值就可以了。 -
特別注意:當
when
的值是D
,表示由伺服器啟動的時間計起,每過24小時歸檔一次;而如果你和我一樣,希望在每天的凌晨歸檔日誌的話,可以配置為midnight
。 - Centos系統可能需要先安裝python-yaml:
sudo yum install python-yaml
來自:建造者說