简单调试级 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 。越来越好奇。

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

来自 3.2 的文档:

logging.lastResort - "最后处理程序"可通过 此属性。这是一篇StreamHandler写给sys.stderr 级别为 WARNING ,用于处理 没有任何日志记录配置。最终结果是只打印 给sys.stderr的消息。这将替换前面的错误消息 说"找不到记录器XYZ的处理程序"。如果您需要 由于某种原因,较早的行为lastResort可以设置为 None .

请注意上面粗体部分 - 这就是为什么您在WARNING下面看不到消息的原因。只需添加一行

logger.addHandler(logging.StreamHandler())

,您将看到logger.debug(...) DEBUG消息。

当您调用 logging.debug(...) 时,如果没有处理程序,这会向根记录器添加一个StreamHandler(如下面的注释中所述( 此处(,这就是两条消息出现的原因。

正在写入调试消息,您只是从未添加过实际的日志输出方法(通过.basicConfig()或通过添加Handler实例(。

因此,不会在任何地方显示日志消息,因为您尚未告诉记录器在哪里显示它们。

如果您碰巧正在测试Google App Engine的应用程序,那么通过在dev_apperver.py参数中添加--log_level=debug来解决此问题

最新更新