tornado + flask 如何处理日志?

现在的项目用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中,日志最好直接打到标准输出,所以请问有什么好的解决办法没?

阅读 6.1k
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 就能避免第二条日志输出。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题