默认情况下,在logging.getLogger
调用时用于构造新记录器的类是logging.Logger
,默认情况下会将propagate
属性设置为True
(文档源)。根据文件,
如果此属性 [ propagate
] 评估为 true,则记录到此记录器的事件将传递给更高级别(祖先)记录器的处理程序,以及附加到此记录器的任何处理程序。
因此,只要记录器的父级之一具有一些重要的处理程序,@fcs 的答案就不会起作用,这很可能是因为根记录器都是记录器的父级,并且它几乎总是StreamHandler
与stderr
流一起使用。
以下简单修复将起作用:
import logging
null_logger = logging.getLogger('foo')
null_logger.addHandler(logging.NullHandler()) # read below for reason
null_logger.propagate = False
null_logger.error("error") # This message will still go nowhere
请注意,添加logging.NullHandler
是必要的,因为如果任何处理程序都未处理日志记录,它将由logging.lastResort
仍会发出此消息的处理程序处理stderr
(自 Python 3.2 以来的行为)。