【问题标题】:This logger has no handler, yet it prints. Why?该记录器没有处理程序,但它会打印。为什么?
【发布时间】:2022-01-17 06:12:23
【问题描述】:

我有一个示例记录器,我认为它没有处理程序,但它会输出日志消息。代码如下:

import logging

ll = logging.getLogger('ll')
print("Has handlers:", ll.hasHandlers())
print("Handlers:", ll.handlers)
ll.propagate = False

ll.warning("Logging with no Handler!")

结果表明记录器没有处理程序,有一个空的处理程序列表,但它会打印输出:

%  python example.py
Has handlers: False
Handlers: []
Logging with no Handler!
%

为什么会这样?是否需要添加NullHandler() 才能停止输出?

【问题讨论】:

  • 相信root logger的默认配置会打印出warnings及以上。考虑致电logging.basicConfig
  • 是的。我假设如果我 调用logging.basicConfig,这将起作用。我很惊讶它没有它也能工作。
  • 我认为将propagate 设置为False 仅适用于在本地处理的消息。如果没有特定的处理程序,它将始终传递给父处理程序。

标签: python python-3.x logging


【解决方案1】:

这是因为对于 Python >= 3.2,有一个 handler of last resort 将严重性为 WARNING 及以上的事件输出到 sys.stderr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多