简单的调试级Python日志记录失败?

3 投票
3 回答
1525 浏览
提问于 2025-04-17 23:14

这是我在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 个回答

0

如果你正在测试一个Google App Engine的应用程序,那么这个问题可以通过在dev_apperver.py的参数中添加--log_level=debug来解决。

2

调试信息确实在被写入,但你没有添加实际的日志输出方法。你可以通过 .basicConfig() 或者通过 添加 一个 Handler 实例来实现。

所以现在没有任何日志信息会显示出来,因为你没有告诉日志记录器应该在哪里显示这些信息。

2

Amber的回答是对的。我可以告诉你为什么你能看到WARNING或更高级别的消息,但看不到INFODEBUG的消息。

根据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(正如在这里的说明),这就是为什么两个消息都会出现的原因。

撰写回答