2015-12-26 67 views
1

几天前,我发现奇怪的日志记录问题与Tornado一起工作。龙卷风协同程序中的Python日志记录问题

我有一组文件:

main.py:

1 import logging 
2 import logging.config 
3 import os 

4 from somemodule.mod import ModClass 
5 from tornado import ioloop 

6 if __name__ == "__main__": 
7  logging.config.fileConfig("logging.ini") 
8  print ioloop.IOLoop.current().run_sync(ModClass.my_coroutine) 

logging.ini:

1 [loggers] 
2 keys=root 

3 [logger_root] 
4 level=NOTSET 
5 handlers=file 

6 [handlers] 
7 keys=file 

8 [handler_file] 
9 level=DEBUG 
10 formatter=default 
11 class=handlers.TimedRotatingFileHandler 
12 args=('/tmp/some-system.log', 'D', 1, 7) 

13 [formatters] 
14 keys=default 

15 [formatter_default] 
16 format=%(asctime)s [%(levelname)s] %(name)[email protected]%(lineno)d: %(message)s 

somemodule/mod.py:

1 import logging 
2 from tornado import gen 

3 logger = logging.getLogger(__name__) 

4 class ModClass(object): 

5  @classmethod 
6  @gen.coroutine 
7  def my_coroutine(cls): 
8   # logger = logging.getLogger(__name__) 
9   logger.critical("SOME MESSAGE") 
10   raise gen.Return("Some string") 

另外,我在某个模块目录中有一个空_ _init_ _.py。

如果我跑main.py,我看到了“一些字符串”控制台,我已经创建了一个,但文件/tmp/some-system.log。我不知道这个小系统有什么问题。

为了使它正常工作,我必须在文件somemodule/mod.py中注释行(3)和取消注释行(8)。

有没有人知道如何使模块记录器工作,而无需在模块中的每个功能中声明它?在这个简单的例子中,这种奇怪行为的原因是什么?

P.S.我的环境:
的Python 2.7.6
龙卷风== 3.1.1

回答

1

您需要调用fileConfig更改为fileConfig("logging.ini", disable_existing_loggers=False)如记录here

+0

我无法理解的是它为什么这样做?即使在Tornado初始化日志供自己使用的情况下,为什么它打破了现有的日志配置? – frist