我试图了解 logging
模块的真正工作原理。以下代码没有像我预期的那样使用react。
#!/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')
它只是将其打印到控制台。
warning
error
critical
但是为什么?不应该也有 info
和 debug
吗?为什么不呢?
问题不在于如何解决这个问题。我知道处理程序和类似的东西。我只是想了解这段代码是如何工作的,以及为什么它没有像我预期的那样使用react。
最佳答案
当没有设置处理程序时,使用 lastResort
处理程序,默认情况下 lastResort
级别设置为 WARNING
。
这是由 this bit of code 实现的:
_defaultLastResort = _StderrHandler(WARNING)
lastResort = _defaultLastResort
def callHandlers(self, record):
...
found = 0
...
if (found == 0):
if lastResort:
if record.levelno >= lastResort.level:
lastResort.handle(record)
还请记住 both loggers and handlers have levels .一个记录可以
因级别太低而被记录器过滤,也可以被过滤
由于水平太低而被处理程序。将记录器级别设置为 DEBUG 允许后续的记录调用通过记录器的级别过滤器,但它们 can still be filtered通过处理程序的级别过滤器,默认设置为 lastResort.level
,即 WARNING
。
关于python - 为什么 logging.setLevel() 在这里对 Python 没有影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31899781/