这是我在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
。)Curiouser和curiouser。
答案 0 :(得分:2)
调试消息 被写入,您从未添加实际的日志输出方法(通过.basicConfig()
或通过adding Handler
实例)。
因此,没有任何日志消息会显示在任何地方,因为您没有告诉记录器在哪里显示它们。
答案 1 :(得分:1)
Amber的回答是正确的。我可以告诉您为什么您会看到WARNING
或更高版本的邮件,而不是INFO
或DEBUG
。
来自documentation for 3.2:
logging.lastResort
- 通过提供“最后的处理程序” 这个属性。 这是StreamHandler
写给sys.stderr
级别为WARNING
,用于处理日志记录事件 没有任何日志记录配置。最终结果是打印 发送给sys.stderr
的邮件。这将替换先前的错误消息 说“没有为记录器XYZ找到处理程序”。如果你需要 由于某种原因,早期的行为可以设置为lastResort
None
。
请注意上面粗体部分 - 这就是为什么您没有看到WARNING
以下的消息的原因。只需添加一行
logger.addHandler(logging.StreamHandler())
在logger.debug(...)
行之前,您会看到DEBUG
消息。
当您致电logging.debug(...)
时,如果没有处理程序,则会向根记录器添加StreamHandler
(如here下方的说明中所述),这就是两个消息出现的原因。
答案 2 :(得分:0)
如果您正在测试Google App Engine的应用程序,则可以通过在--log_level=debug
参数中添加dev_apperver.py
来解决此问题