几天前,我发现奇怪的日志记录问题与Tornado合作。
我有一组文件:
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)s@%(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")
此外,我在somemodule目录中有一个空_ _init _ _。py。
如果我运行main.py,我在控制台中看到“Some string”,我有创建,但是空文件/tmp/some-system.log 。我不知道这个小系统有什么问题。
为了使其正常工作,我必须在文件somemodule / mod.py中注释第(3)行并取消注释第(8)行。
有人知道如何使模块记录器工作而不需要在模块中的每个函数中声明它吗?在这个简单的例子中,这种奇怪行为的原因是什么?
P.S。我的环境:
Python 2.7.6
龙卷风== 3.1.1