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

时间:2014-03-21 04:50:14

标签: python logging

这是我在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。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

Amber的回答是正确的。我可以告诉您为什么您会看到WARNING或更高版本的邮件,而不是INFODEBUG

来自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来解决此问题