tornado源代码分析
打开site-packages/tornado/log.py,最开头的注释文档说明了tornado的日志模块是直接和logging模块集成的
1 | """Logging support for Tornado. |
其中一共用到了三种被命名的logger
1 | # Logger objects for internal tornado use |
access_log 用于记录每一个访问请求
app_log 用于记录程序运行过程中,所有未被处理的异常
gen_log 用于记录tornado自己运行过程中报的错误和警告
tornado日志格式分两块,一块是logging的格式,一块是tornado请求消息格式。
tornado默认的访问日志输出是这样的:
1 | WARNING:tornado.access:404 GET / (127.0.0.1) 167.93ms |
其中,WARNING:tornado.access:404
为logger日志内容,GET / (127.0.0.1) 167.93ms
为访问消息。
根据enable_pretty_logging函数,可知tornado默认采用logging的root logger,并且,如果logger没有配置handler,则为其添加一个默认的StreamHandler。
因而,应该为logging root logger预创建Handler,并指定日志格式。
依据tornado文档,输出访问日志的为Application.log_request,如果要自定义访问日志输出,可以继承Application并重写log_request,或者自定义log_request函数,并设置为Application.settings的log_function属性。
当然选择后者。log_function函数的写法,参照原版Application.log_request就行。
我们结合上章学的loguru模块 就可以将访问日志输出到loguru中了
1 | def _log_request(self, handler): |