tornado日志默认格式变更恢复

August 2018 · 1 minute read

我们知道,tornado 日志默认格式是类似这样的:

[I 180811 19:43:13 web:2106] 200 GET / (127.0.0.1) 4.25ms
[W 180811 19:43:14 web:2106] 404 GET /favicon.ico (127.0.0.1) 2.01ms

[级别 Infor/Warning/Error 时间 模块:行数] 状态码 方法 路由 耗时,记录既简短又实用,非常好。

但是有一天我发现自己的 tornado 日志格式 突变 了:

INFO:tornado.access:200 GET / (127.0.0.1) 7.65ms
INFO:tornado.access:200 GET /static/images/favicon.ico (127.0.0.1) 1.42ms

这是怎么回事呢?关键是时间没了,这个不好! 猜测是自己新引入的什么模块本身引入了 logging 模块并且有所设置, 从而改变了 tornado 本身对于 logging 的全局设置。

logging 这个模块比较 特殊,即便在被引用的模块中,也会改变主程序中的 logging 设置!

首先找到嫌疑的模块有哪些,然后逐一试验一下是否引入,查看 tornado 日志格式。 最终发现模块 metpy.gridding 引入并设置了 logging。

为了恢复 tornado 日志的默认格式,需要在 tornado 主程序开头所有 import 语句之后增加如下语句:

import logging
from tornado.log import LogFormatter
root_logger = logging.getLogger()
root_streamhandler = root_logger.handlers[0]
root_streamhandler.setFormatter(LogFormatter())

好了,这样就可以了,LogFormatter() 是 tornado 默认的日志格式。