为什么我没有在Python中接收日志INFO消息?

问题描述:

所以我在命令行中运行蟒下面的代码:为什么我没有在Python中接收日志INFO消息?

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()。这是奇怪的,因为伐木蟒蛇文档指出:

功能debug()info()warning()error()critical()会自动调用basicConfig()如果没有处理程序的根记录定义。

+0

你有什么处理?如果内存服务,处理程序也可以按日志级别过滤。 – 2012-08-04 02:26:55

+0

上面的代码是唯一运行的代码,所以我猜没有。尽管看到我的编辑。 – Retsam 2012-08-04 03:09:49

+0

只是一个参考,你确实知道,严格来说,你的'rootLogger'不是真正的根记录器,对吧? – 2012-08-04 03:28:00

您从手动引用该位Module-Level Functions下,并只适用于模块功能

logging.debug() 

字面上叫。由于您使用rootLog.info()调用实例方法,因此basicConfig没有被调用,您可能正在与空记录器进行交谈。这里的文档有点令人困惑。

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

好的,我通过日志记录模块中的代码挖掘出来,我想我至少有部分想到了。你所看到的情况正在发生,因为你所称的rootLogger实际上并不是根记录器。确实,如果直接在logging上调用某个日志方法时没有将处理程序添加到根日志记录程序(真实根日志记录程序),则它会调用basicConfig,但您正在对Logger实例调用日志方法这里根本不叫basicConfig。无论如何,这在这种情况下实际上是不相关的。 :)我不确定这里调用的处理函数是在哪里创建的,但我几乎可以保证它连接到真正的根记录器。真正的根记录器默认初始化为WARNING。尝试做logging.root.setLevel(logging.INFO),看看你是否得到你所期望的。如果您手动将记录器附加到您的rootLogger上,您还应该看到您想要的内容。