python - tornado + flask 如何处理日志?
伊谢尔伦
伊谢尔伦 2017-04-17 16:48:41
[Python讨论组]

现在的项目用Flask实现了一个事件处理服务,会从MQ中接收消息进行格转后写入到MySQL数据库。

所有的日志都是通过logging模块同时打到文件和标准输出。

在用tornado运行flask的时候发现标准输出的日志内容格式异常:

vs INFO 2015-12-01 17:30:36,518 [ sqs_utils(16):93:read_messages ] SQS: event name ObjectRemoved:Delete will be ignored
INFO:vvs:SQS: event name ObjectRemoved:Delete will be ignored

例如上面的日志,第一行为日志模块实际输出的效果。莫名其妙的会出现第二行这种格式的日志。

由于应用部署在docker中,日志最好直接打到标准输出,所以请问有什么好的解决办法没?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
怪我咯

第二条日志记录应该是root logger的handler输出,默认情况下日志会在handlers之间处理,并向上层冒泡。
如下,日志 callHandlers的代码。

c = self
found = 0
while c:
    for hdlr in c.handlers:
        found = found + 1
        if record.levelno >= hdlr.level:
            hdlr.handle(record)
    if not c.propagate:
        c = None    #break out
    else:
        c = c.parent
        

找到输出第一条日志的logger对象,设置 logger.propagate = 0 就能避免第二条日志输出。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号