这个记录器没有处理程序,但它会打印。为什么?
This logger has no handler, yet it prints. Why?
我有一个示例记录器,我认为它没有处理程序,但它会输出日志消息。这是代码:
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()
停止输出吗?
这是因为对于 Python >= 3.2,有一个 handler of last resort 输出严重性 WARNING
和更高的事件 sys.stderr
。
我有一个示例记录器,我认为它没有处理程序,但它会输出日志消息。这是代码:
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()
停止输出吗?
这是因为对于 Python >= 3.2,有一个 handler of last resort 输出严重性 WARNING
和更高的事件 sys.stderr
。