我正在尝试用Python编写记录器,但是.setLevel
方法似乎并不在乎我将其传递给哪个记录级别。这是一个最小可重复的示例:
import logging
logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")
输出:
warning
error
critical
如图所示,我已将logger
对象的级别设置为DEBUG
,但是仅发出级别为WARNING
及更高级别的消息。
来自setLevel
的{{3}}:
将此记录器的阈值设置为水平。严重程度低于级别的日志消息将被忽略;具有严重性级别或更高级别的日志消息将由服务于该记录器的任何一个或多个处理程序发出,除非将处理程序的级别设置为高于严重性级别。
在我的代码中,我调用了setLevel
来设置此特定记录器对象的级别,因此它应该尊重该级别。对此行为有何解释?
我已经看了下面的stackoverflow问题,这两种解决方案都不适用于我的情况。
Python logger not respecting setLevel?
我正在使用CPython 3.8.2
答案 0 :(得分:2)
啊,你没意识到就打在了头上
除非将处理程序的级别设置为比级别更高的严重性级别。
根记录器的级别为logging.WARNING
,它的默认处理程序是您与logger
一起使用的处理程序,除非您通过明确地给logger
一个处理程序来另外指定。
运行logging.basicConfig()
将为根记录器创建一个显式处理程序,它与根处理程序没有相同的限制。
import logging
logger = logging.getLogger('test')
logger.setLevel(logging.DEBUG)
logger.debug('invisible')
logger.warning('visible')
logging.basicConfig()
logger.debug('visible')
logger.warning('visible')