为什么我没有在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()
如果没有处理程序的根记录定义。
您从手动引用该位Module-Level Functions下,并只适用于模块功能
logging.debug()
字面上叫。由于您使用rootLog.info()
调用实例方法,因此basicConfig没有被调用,您可能正在与空记录器进行交谈。这里的文档有点令人困惑。
使用loggging.basicConfig()
和事情应该工作。
好的,我通过日志记录模块中的代码挖掘出来,我想我至少有部分想到了。你所看到的情况正在发生,因为你所称的rootLogger
实际上并不是根记录器。确实,如果直接在logging
上调用某个日志方法时没有将处理程序添加到根日志记录程序(真实根日志记录程序),则它会调用basicConfig
,但您正在对Logger
实例调用日志方法这里根本不叫basicConfig
。无论如何,这在这种情况下实际上是不相关的。 :)我不确定这里调用的处理函数是在哪里创建的,但我几乎可以保证它连接到真正的根记录器。真正的根记录器默认初始化为WARNING
。尝试做logging.root.setLevel(logging.INFO)
,看看你是否得到你所期望的。如果您手动将记录器附加到您的rootLogger
上,您还应该看到您想要的内容。
你有什么处理?如果内存服务,处理程序也可以按日志级别过滤。 – 2012-08-04 02:26:55
上面的代码是唯一运行的代码,所以我猜没有。尽管看到我的编辑。 – Retsam 2012-08-04 03:09:49
只是一个参考,你确实知道,严格来说,你的'rootLogger'不是真正的根记录器,对吧? – 2012-08-04 03:28:00