为什么logging.setLevel()在这里对Python无效?

buh*_*htz 6 python logging python-3.x

我试着理解logging模块是如何工作的.以下代码没有像我预期的那样反应.

#!/usr/bin/env python3
import logging

l = logging.getLogger()
l.setLevel(logging.DEBUG)

print('enabled for DEBUG: {}'.format(l.isEnabledFor(logging.DEBUG)))

l.debug('debug')
l.info('info')
l.warning('warning')
l.error('error')
l.critical('critical')
Run Code Online (Sandbox Code Playgroud)

它只是打印到控制台.

warning
error
critical
Run Code Online (Sandbox Code Playgroud)

但为什么?不应该有infodebug,太?为什么不?

问题不在于如何解决这个问题.我知道处理程序和类似的东西.我只是试着理解这段代码是如何工作的以及为什么它没有像我期望的那样反应.

unu*_*tbu 5

如果未设置lastResort处理程序,则使用处理程序,默认情况下,lastResort级别设置为WARNING.

这是通过这段代码实现的:

_defaultLastResort = _StderrHandler(WARNING)
lastResort = _defaultLastResort

    def callHandlers(self, record):
        ...
        found = 0
        ...
        if (found == 0):
            if lastResort:
                if record.levelno >= lastResort.level:
                    lastResort.handle(record)
Run Code Online (Sandbox Code Playgroud)

还要记住,记录器和处理程序都有级别.记录器可以过滤记录以获得过低的级别,并且还可以通过处理程序过滤记录以获得过低的级别.将记录器级别设置为DEBUG允许后续日志记录调用通过记录器的级别过滤器,但它们仍然可以由处理程序的级别过滤器进行过滤,该过滤器设置为lastResort.level,即WARNING默认情况下.