日志记录模块:StreamHandler似乎未附加到记录器

时间:2019-08-09 11:48:38

标签: python logging

我正在学习Python的日志记录模块,我无法弄清楚为什么无法记录DEBUG和INFO消息。这是代码(python 2.7):

import logging

if __name__ == "__main__" :

    logger = logging.getLogger("test")
    c_handler = logging.StreamHandler()
    c_handler.setLevel(logging.DEBUG)

    logger.addHandler(c_handler)


    # test 
    logger.debug('This is a debug message')
    logger.info('This is an info message')
    logger.warning('This is a warning message')
    logger.error('This is an error message')
    logger.critical('This is a critical message')

这导致输出

This is a warning message
This is an error message
This is a critical message

我希望输出

This is a debug message
This is an info message
This is a warning message
This is an error message
This is a critical message

它看起来像c_handler.setLevel(logging.DEBUG)不起作用,并且记录器使用其默认设置。默认情况下,它不会记录DEBUG和INFO日志。

我在做什么错了?

3 个答案:

答案 0 :(得分:2)

This diagram from the docs(请参见下文)有助于说明日志记录的工作方式。注意顶部附近的两个菱形。 “记录器流程”菱形检查“为调用级别启用了记录器”,而“处理程序流程”菱形检查“为LogRecord级别启用了处理器”。这暗示着一个事实, 记录器和处理程序都有记录级别。

要记录DEBUG级别的记录,请将 logger 的级别设置为DEBUG(以及将处理程序级别设置为DEBUG):

logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)    

enter image description here


import logging

if __name__ == "__main__" :

    logger = logging.getLogger("test")
    logger.setLevel(logging.DEBUG)    
    c_handler = logging.StreamHandler()
    c_handler.setLevel(logging.DEBUG)
    logger.addHandler(c_handler)

    # test 
    logger.debug('This is a debug message')
    logger.info('This is an info message')
    logger.warning('This is a warning message')
    logger.error('This is an error message')
    logger.critical('This is a critical message')

打印

This is a debug message
This is an info message
This is a warning message
This is an error message
This is a critical message

答案 1 :(得分:0)

根据文档

  

默认级别为WARNING,这意味着仅此事件   除非记录程序包是   配置为执行其他操作。

您可以在导入日志记录包后添加类似的内容,它应该可以工作

logging.basicConfig(level=logging.DEBUG)

答案 2 :(得分:0)

谢谢大家

使用

 logger.setLevel(logging.DEBUG)

弄巧成拙。

顺便说一句,我也尝试过

 logging.basicConfig(level=logging.DEBUG)

但是给出以下输出:

 This is a debug message
DEBUG:test:This is a debug message
This is an info message
INFO:test:This is an info message
This is a warning message
WARNING:test:This is a warning message
This is an error message
ERROR:test:This is an error message
This is a critical message
CRITICAL:test:This is a critical message