【问题标题】:Logger doesn't print debug messages after setting handler and log level设置处理程序和日志级别后,记录器不打印调试消息
【发布时间】:2018-12-04 00:02:16
【问题描述】:

我有以下基于Logging Cookbooklogging 测试的极简示例:

import logging

logger = logging.getLogger('test')
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - '
                              '%(message)s')

ch.setFormatter(formatter)
logger.addHandler(ch)


print(logger.handlers)
logger.debug('hello world')

以上产生以下输出:

$ python test_log.py
[<StreamHandler <stderr> (DEBUG)>]

由于我已经定义了一个处理程序并将日志级别设置为调试,我希望 hello world 日志消息会显示在上面的示例中。

【问题讨论】:

  • 因为您的记录器(不是处理程序)在您的示例代码中具有级别 NOTSET,这意味着它会将事件传播到其唯一的祖先,即根记录器,它实际上没有处理程序输出一些东西。尽管我不喜欢参考自己的答案; here's 答案的长版本。简短的版本是:在开始使用记录器之前将logger.setLevel(logging.DEBUG) 添加到您的代码中。

标签: python python-3.x logging


【解决方案1】:

如果没有明确设置记录器的级别,系统会查找祖先记录器的级别,直到找到其级别已明确设置的记录器。在这种情况下,它是根记录器,它是名为“test”的记录器的父级。将此记录器或根记录器的级别设置为 DEBUG 将导致输出日志消息。有关 Python 日志记录中的事件信息流,请参阅文档的 this part

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2022-01-25
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多