这是我在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
或更高级别的消息,而不是INFO
或DEBUG
的消息。
来自 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
来解决此问题