我在我的系统中使用了python logging
并找到了工作。
我的日志层次结构如下所示。
A
。A
继承A.B
,A.C
....(子记录器只使用A
的处理程序和格式化程序)所以所有记录器都工作了,共享A
的处理程序。
我需要添加Websocket
程序,所以选择Tornado。
但是在添加Tornado
之后,会突然出现重复的日志。
例如。
Time-A : log message #This is log message I print
INFO:A : log message #This is duplicated log message
更详细的说明,如果我致电ioloop.IOLoop.instance().start()
如果我阻止ioloop.IOLoop.instance().start()
,则找不到问题。
似乎ioloop.IOLoop.instance().start()
添加了根记录器处理程序。
为什么呢?我该如何解决?
答案 0 :(得分:1)
事件循环必须从回调中捕获异常; Tornado使用日志记录来告诉您发生了异常。如果没有配置处理程序,您将永远不会看到这些消息,因此IOLoop在启动时会根据需要创建处理程序。为防止这种情况,请在启动IOLoop之前为根记录器或tornado
记录器定义处理程序。
当IOLoop创建处理程序时,它会对根记录器而不是tornado
记录器执行此操作,因为根处理程序是在其他位置自动创建的(即日志记录模块的顶级函数,如logging.error),因此,如果IOLoop创建了一个tornado
处理程序,然后创建了一个名为logging.error
的其他模块并创建了一个根处理程序,那么会有双重日志记录。