Python Tornado 协程中的日志记录问题

Python's logging issue in Tornado coroutine

几天前,我发现使用 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")

此外,我在某个模块目录中有一个空的__init__.py。

如果我 运行 main.py,我在控制台中看到 "Some string",并且我有一个 created,但是 文件 /tmp/some-system.log。不知道这个小系统有什么问题

为了使其正常工作,我必须在文件 somemodule/mod.py.

中注释行 (3) 并取消注释行 (8)

有谁知道如何使模块记录器工作而无需在模块的每个函数中声明它?在这个简单的例子中出现如此奇怪行为的原因是什么?

P.S。我的环境:
Python2.7.6
龙卷风==3.1.1

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