为什么我的日志会转到多个地方?

Why are my logs going to multiple places?

我正在尝试将我的日志拆分为两个文件。我有主日志 (root) 和一个名为 'auxlog' 的子日志。我已经指定 auxlog 记录到它自己的文件,它成功地完成了,但它也出现在根日志中。我不知道我是否误解了日志记录模块的基本原理,或者我是否只是错过了一个配置选项。基本上,我想将我的日志分为以下两类:

这两个都在工作,但是特定 class 的日志是多余的,因为它被写入了两个文件。这是我的代码:

logging.basicConfig(filename='app.log', level=logging.INFO, format='[%(asctime)s][%(name)s][%(levelname)s]: %(message)s')

# Aux Logger
auxlog = logging.getLogger("auxlog")
aux_handler = logging.FileHandler("aux.log")
aux_handler.setFormatter(logging.Formatter("[%(asctime)s]:[%(name)s]\t%(message)s"))
auxlog.setLevel(logging.INFO)
auxlog.addHandler(aux_handler)

当我在我的特殊 class 中使用 auxlog 时,我只是调用 auxlog.info("my message here") ,但是,它仍然出现在 app.log

TL;DR:您可以通过设置 auxlog.propagate = False.

来实现您想要的行为

Python 记录器通过根据记录器名称形成一棵树来工作(在 '.' 上拆分)。顾名思义,根记录器构成了这棵树的根。因此,例如,名为 a.b 的记录器将是 a 的子项,后者将是根记录器的子项。

默认情况下,所有日志都会传播到它们的父记录器。重要的是,处理程序 而不是 防止这种传播行为——即它们的行为像一个“发球台”,而不是一个“水槽”。如果您希望隔离特定记录器,则必须明确关闭它们的传播。