我试着理解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')
它只是打印到控制台。
warning
error
critical
但为什么呢?不应该有info
和debug
吗?为什么不呢?
问题不在于如何解决这个问题。我知道处理程序和类似的东西。我只是试着理解这段代码是如何工作的以及为什么它没有像我期望的那样反应。
答案 0 :(得分:5)
如果未设置处理程序,则使用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
,默认情况下