logging.StreamHandler.setLevel(logging.DEBUG)< ---不起作用

时间:2014-04-15 15:37:40

标签: python logging handler

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

logging.DEBUG 记录模块下定义

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__')

此级别变量的问题在哪里?

1 个答案:

答案 0 :(得分:3)

问题是调试程序消息在进入处理程序之前被记录器过滤掉了。通过将handler.setLevel(logging.DEBUG)更改为logger.setLevel(logging.DEBUG)来解决此问题。

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