如何在Python模块初始化时启用日志记录?

xis*_*xis 2 python logging module

我有以下代码:

#! /usr/bin/python
import logging
import test_log

def main():
    logging.error("hello")

if __name__ == '__main__':
    logging.basicConfig()

    main()
Run Code Online (Sandbox Code Playgroud)

其中test_log定义为:

import logging

_logger = logging.getLogger(__name__)
_logger.warn('initializing ' + __name__)
Run Code Online (Sandbox Code Playgroud)

执行主脚本将导致输出:

No handlers could be found for logger "test_log"
ERROR:root:hello
Run Code Online (Sandbox Code Playgroud)

我相信是因为该import test_log语句会执行_logger = logging.getLogger(__name__); _logger.warn('initializing ' + __name__),而此时logging.basicConfig并未执行。有办法解决这个问题吗?

Vin*_*jip 5

如果您无法避免在导入时进行日志记录,请NullHandler在 中向记录器添加一个实例test_log。这将防止出现“无处理程序...”消息。

此外,您还两次致电basicConfig(). 避免这种情况 - 仅进行一次调用(在 中if __name__ == '__main__')。

  • 很高兴从包维护者那里得到答案:) (3认同)