这个记录器没有处理程序,但它会打印。为什么?

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