python - 为什么 logging.setLevel() 在这里对 Python 没有影响?

标签 python python-3.x logging

我试图了解 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

但是为什么?不应该也有 infodebug 吗?为什么不呢?

问题不在于如何解决这个问题。我知道处理程序和类似的东西。我只是想了解这段代码是如何工作的,以及为什么它没有像我预期的那样使用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/

相关文章:

python pandas np.where 来自另一列的值

python - PyLint 在 shutil.rmtree(...) 的错误处理函数中引发 'misplaced-bare-raise'

python - 在 for 循环中从列表中删除元素

python-3.x - PyCharm 中的弱警告 : Unexpected argument

logging - 如何更改 cqlsh (cqlsh_history) 日志文件位置?

java - 如何使用 MDC 在 log4j2 中动态创建日志文件名

python - Django 立即保存并返回对象(使用自定义 pk)

python - 如何理解鼠标按下的时间?

python - 渲染 : No module named app 时出现 ImportError

logging - 使用logstash-grok、clone 和mutate 将日志条目拆分为两个事件