使用 tornado (python 的一个 web 框架)的自带log时遇到一个问题,即tornado.log.logging.info时,默认是将info(或者debug, error等Level)信息打印到stderr而非stdout,这样会与其它真正的error信息混杂在一起,特别当后台日志输出频繁时,给问题排查带来麻烦。

经过查看tornado源码(Linux x86_64 python2.7, 路径 /usr/lib64/python2.7/site-packages/tornado/log.py),发现其内部亦是直接使用python自带logging模块(import logging),因此tornado.log.logging即python的logging. 找到其中logger的StreamHandler, 查看python 的官方文档,可看到其中说明:


所以直接将 /usr/lib64/python2.7/site-packages/tornado/log.py 源码里的 channel = logging.StreamHandler() 改成 channel = logging.StreamHandler(sys.__stdout__),就可以将我们自己手动打印的后台信息输出到stdout,这样当开启daemon参数运行程序时,就可以将stdout重定向到文件,将我们自己的log信息与其它真正的error信息区分开来,不再会搅在一起,目的达到了。

Logo

更多推荐