【问题标题】:logging.StreamHandler.setLevel(logging.DEBUG) <--- doesn't worklogging.StreamHandler.setLevel(logging.DEBUG) <--- 不起作用
【发布时间】:2014-05-30 01:57:24
【问题描述】:

我不知道为什么它无法记录该消息,我认为一切都已正确设置。

logging.DEBUG是在logging模块下定义的

import logging
import sys

logger = logging.getLogger('collega_GUI')
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s %(levelname)s --file: %(module)s --riga: %(lineno)d, %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.debug('def __init__')

但如果我尝试运行 这个,它会起作用

logger.warning('def __init__')

这个级别变量的问题在哪里?

【问题讨论】:

    标签: python logging handler


    【解决方案1】:

    问题在于调试级别的消息在到达处理程序之前就被记录器过滤掉了。通过将handler.setLevel(logging.DEBUG) 更改为logger.setLevel(logging.DEBUG) 即可解决此问题。

    当日志消息沿链传递时,您可以在多个不同位置按日志级别进行过滤。默认情况下,记录器只传递 INFO 及以上,处理程序接受所有内容。如果您希望不同级别的日志记录转到不同的位置,则允许处理程序使用不同的日志级别很有用。例如,您可以将记录器设置为 DEBUG,然后创建一个在 WARN 及以上位置记录到屏幕的处理程序,以及在 DEBUG 及以上位置记录到文件的另一个处理程序。用户获得了一些信息,并且日志文件很健谈。

    【讨论】:

    • 默认是WARNING,不是INFO
    • @VinaySajip - 好吧,就是这样!我已经改变了答案-谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多