为什么无法更改Python日志记录器级别?

4

我正在尝试改变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

为什么会这样,我做错了什么?
3个回答

4
问题是默认的日志处理程序仅处理默认的日志级别。 您需要添加一个实际记录日志的日志处理程序。 如果只需要控制台日志记录,可以使用以下内容:
logger = logging.getLogger('a')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
...

这将让你获得:
log level 10
Debug
Info
Warning
Error

logging.basicConfig() 添加了一个基本格式的处理程序,但通常您需要为日志定义自己的格式。


1

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

logging.basicConfig()

0

虽然您已经设置了记录器的级别,但消息必须通过具有日志级别的处理程序。规则是最严格的日志级别获胜。有几种解决方案。广义上,您可以使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接