4

所以我从命令行 python 运行以下代码:

import logging

rootLog = logging.getLogger(__name__)
rootLog.setLevel(logging.INFO)
rootLog.warning("This is a root warning")
rootLog.info("This is root info")
def info():
    log = rootLog.getChild("info")
    log.info("This is info")
    log.warning("This is a warning")
info()    

我希望在控制台上看到所有四个日志消息,但我只看到警告。到底是怎么回事?我是不是误会了什么?

编辑:

我通过在脚本开头添加 logging.basicConfig() 发现我会得到我期望的输出。这很奇怪,因为有关日志记录的 python 文档指出:

如果没有为根记录器定义处理程序,函数debug()info()、和将自动调用。warning()error()critical()basicConfig()

4

2 回答 2

3

好的,我仔细研究了日志记录模块中的代码,我想我想通了,至少部分想通了。您所看到的正在发生,因为您所调用rootLogger的实际上不是根记录器。确实,当您直接调用其中一个日志方法时,如果没有将处理程序添加到根记录器(真正的根记录器)logging,它会调用实际上根本没有打电话。无论如何,这在这种情况下实际上是无关紧要的。:) 我不确定在这里调用的处理程序是在哪里创建的,但我几乎可以保证它已附加到真正的根记录器。真正的根记录器默认初始化为. 尝试做basicConfigLoggerbasicConfigWARNINGlogging.root.setLevel(logging.INFO)看看你是否得到你所期望的。如果您手动将记录器附加到您的rootLogger.

于 2012-08-04T03:46:21.637 回答
3

您从手册中引用的位在模块级功能下,仅适用于模块功能

 logging.debug()

字面意思是这样称呼的。由于您正在调用带有rootLog.info()basicConfig 的实例方法,因此不会为您调用,并且您可能正在与空记录器交谈。那里的文档有点混乱。

使用loggging.basicConfig()和事情应该工作。

于 2012-08-04T04:10:25.850 回答