网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandler来支持以不同的时间维度归档日志。
然而根据Logging HOWTO的官方指南设置后,却发现新的日志只剩下root的,Tornado内部的logger全部没有生效。
参考*上的一个回答,我发现下面的配置能让Tornado内部的logger也用上TimedRotatingFileHandler:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# 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的入口代码处调用:
1
|
logging.config.dictConfig(yaml.load( open ( 'logging.yaml' , 'r' )))
|
- 如果你想按别的时间维度分割日志,修改when参数对应的值就可以了。
- 特别注意:当when的值是D,表示由服务器启动的时间计起,每过24小时归档一次;而如果你和我一样,希望在每天的凌晨归档日志的话,可以配置为midnight。
- Centos系统可能需要先安装python-yaml:sudo yum install python-yaml