按日期打印Python的Tornado框架中的日志的方法
网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandler来支持以不同的时间维度归档日志。
然而根据LoggingHOWTO的官方指南设置后,却发现新的日志只剩下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的入口代码处调用:
logging.config.dictConfig(yaml.load(open('logging.yaml','r')))
- 如果你想按别的时间维度分割日志,修改when参数对应的值就可以了。
- 特别注意:当when的值是D,表示由服务器启动的时间计起,每过24小时归档一次;而如果你和我一样,希望在每天的凌晨归档日志的话,可以配置为midnight。
- Centos系统可能需要先安装python-yaml:sudoyuminstallpython-yaml