简单的调试级Python日志记录失败?
这是我在Python 3.3.2下运行的一段代码:
import logging
logger = logging.getLogger("test.logger")
logging.getLogger().setLevel(logging.DEBUG) # Shouldn't be needed
logger.setLevel(logging.DEBUG)
print("Effective logging level is {}".format(logger.getEffectiveLevel()))
logger.debug("This is a debug-level message.")
这是输出结果:
Effective logging level is 10
所以调试信息没有被写入,尽管看起来日志记录器的级别是正确的。我在Python文档或者这个网站上没有找到任何提示我遗漏了什么的内容。到底发生了什么呢?谢谢。
补充:如果我通过添加这一行来使用根日志记录器...
logging.debug("Try this")
...那么两个消息都会显示出来。(注意这里用的是 logging
而不是 logger
。)真是越来越奇怪了。
3 个回答
如果你正在测试一个Google App Engine的应用程序,那么这个问题可以通过在dev_apperver.py
的参数中添加--log_level=debug
来解决。
调试信息确实在被写入,但你没有添加实际的日志输出方法。你可以通过 .basicConfig()
或者通过 添加 一个 Handler
实例来实现。
所以现在没有任何日志信息会显示出来,因为你没有告诉日志记录器应该在哪里显示这些信息。
Amber的回答是对的。我可以告诉你为什么你能看到WARNING
或更高级别的消息,但看不到INFO
或DEBUG
的消息。
根据3.2版本的文档:
logging.lastResort
- 这个属性提供了一个“最后的处理器”。这是一个StreamHandler
,它将信息写入sys.stderr
,并且级别是WARNING
,用于处理没有任何日志配置时的日志事件。最终的结果就是把消息直接打印到sys.stderr
。这替代了之前的错误信息,说明“找不到logger XYZ的处理器”。如果你出于某种原因需要之前的行为,可以把lastResort
设置为None
。
注意上面加粗的部分——这就是你看不到低于WARNING
级别消息的原因。只需在
logger.addHandler(logging.StreamHandler())
之前添加一行代码
,你就能看到DEBUG
消息出现了。
当你调用logging.debug(...)
时,如果根logger没有处理器,这会给根logger添加一个StreamHandler
(正如在这里的说明),这就是为什么两个消息都会出现的原因。