Python 日志记录,如何过滤特定的记录器

San*_*Kim 2 python logging filter python-logging

这似乎是一个非常简单的问题,但我找不到任何很好的例子。

我想过滤一个具有特定名称的记录器。

例如

import logging

logging.root.setLevel(logging.DEBUG)
logging.root.addHandler(logging.StreamHandler())
logging.root.addFilter(logging.Filter(name="a"))

a = logging.getLogger("a")
b = logging.getLogger("b")

a.info("aaaaa")
b.info("bbbbb")
Run Code Online (Sandbox Code Playgroud)

我希望 root 记录器会过滤消息,b因为我知道logging.Filter只通过nameor childs of the name.

但正如您所料,它只会传递所有消息。

我有什么误解?

gon*_*opp 5

正如logging文档所述:

由后代记录器生成的事件不会被记录器的过滤器设置过滤,除非过滤器也已应用于那些后代记录器

如果您只想关闭来自子记录器的消息,您可以设置其级别:

logging.getLogger("a").setLevel(logging.CRITICAL + 1)
Run Code Online (Sandbox Code Playgroud)