logging.StreamHandler.setLevel(logging.DEBUG) 不起作用
我不知道为什么它无法记录那个信息,我觉得一切设置得都没问题。
而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__')
这个级别变量的问题出在哪里呢?
1 个回答
7
问题在于,调试级别的信息在到达处理器之前就被记录器过滤掉了。解决这个问题的方法是把 handler.setLevel(logging.DEBUG)
改成 logger.setLevel(logging.DEBUG)
。
在日志信息传递的过程中,你可以在多个地方根据日志级别进行过滤。默认情况下,记录器只会传递INFO级别及以上的信息,而处理器则会接受所有信息。如果允许处理器使用不同的日志级别,那就很有用,因为你可以把不同级别的日志信息发送到不同的地方。比如,你可以把记录器设置为DEBUG级别,然后创建一个处理器,只在WARN级别及以上的时候把信息显示到屏幕上,另一个处理器则在DEBUG级别及以上的时候把信息记录到文件里。这样,用户得到的信息比较少,而日志文件里的内容就会很多。