首页 > 解决方案 > 日志记录模块:StreamHandler 似乎没有附加到记录器

问题描述

我正在学习 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 日志。

我究竟做错了什么?

标签: pythonlogging

解决方案


文档中的这张图(见下文)有助于解释日志记录的工作原理。注意顶部附近的两颗钻石。“记录器流”菱形检查“为调用级别启用记录器”,而“处理程序流”菱形检查“为 LogRecord 级别启用处理程序”。这暗示了记录器和处理程序都具有日志记录级别的事实。

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

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

在此处输入图像描述


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

推荐阅读