【问题标题】:Simple debug-level Python logging fails?简单的调试级 Python 日志记录失败?
【发布时间】:2014-03-21 04:50: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。)好奇和好奇。

【问题讨论】:

    标签: python logging


    【解决方案1】:

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

    来自documentation 3.2:

    logging.lastResort - “最后的处理程序”可通过 这个属性。 这是StreamHandler 写给sys.stderr 级别为WARNING,用于处理日志中的事件 没有任何日志记录配置。最终结果是只打印 将消息发送至sys.stderr。这替换了早期的错误消息 说“找不到记录器 XYZ 的处理程序”。如果你需要 由于某种原因,早期的行为,lastResort 可以设置为 None.

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

    logger.addHandler(logging.StreamHandler())
    

    logger.debug(...) 行之前,您会看到DEBUG 消息出现。

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

    【讨论】:

    • 感谢您的说明。
    【解决方案2】:

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

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

    【讨论】:

    • 如果我使用 logger.warning 或 .error 或 .critical,我会看到该消息。只有信息和调试级别的消息被禁止。就好像原来的30级(logging.WARNING)还在使用。
    • 我遇到了和托尼一样的麻烦。我在两台不同的计算机上有相同的代码。一个输出调试,一个不输出。一个 Python 2.7.12(失败)和另一个 Python 2.7.13(工作)。 Python 2.7.12 是否存在日志记录问题?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2015-05-02
      • 2017-01-03
      相关资源
      最近更新 更多