繁体   English   中英

为什么我不能改变python logger的级别?

[英]Why can't I change the level of python logger?

我正在尝试更改 python 记录器的日志级别。 但它似乎不起作用:

import logging

#50 CRITICAL
#40 ERROR
#30 WARNING <-- default
#20 INFO
#10 DEBUG
# 0 NOTSET 

logger = logging.getLogger('a')
logger.setLevel(logging.DEBUG)
print('log level', logger.getEffectiveLevel())
logger.debug('Debug') # 10
logger.info('Info') # 20
logger.warning('Warning') # 30
logger.error('Error') # 40

输出是:

log level 10
Warning
Error

但应该是:

log level 10
Debug
Info
Warning
Error

为什么会这样,我做错了什么?

问题在于默认日志处理程序仅处理默认日志级别。 您必须添加一个执行实际日志记录的日志处理程序。 如果您只需要控制台日志记录,您可以使用:

logger = logging.getLogger('a')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
...

这让你:

log level 10
Debug
Info
Warning
Error

logging.basicConfig()添加具有一些基本格式的处理程序,但通常您会定义自己的日志格式。

解决此问题的一种方法是在记录消息之前设置基本配置。 像这样:

logging.basicConfig()

尽管您已经设置了记录器的级别,但消息必须通过一个也具有日志级别的处理程序。 规则是最严格的日志级别获胜。 有几种解决方案。 从广义上讲,您可以使用basicConfig来设置日志记录根,它将被像“a”这样的子记录器继承。 或者为“a”设置一个处理程序。

import logging

#50 CRITICAL
#40 ERROR
#30 WARNING <-- default
#20 INFO
#10 DEBUG
# 0 NOTSET 

# option - set a basic config for root logger and its descendents
#logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('a')
logger.setLevel(logging.DEBUG)

# option = create a handler for this logger
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)

print('log level', logger.getEffectiveLevel())
logger.debug('Debug') # 10
logger.info('Info') # 20
logger.warning('Warning') # 30
logger.error('Error') # 40

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM