这似乎是一个非常简单的问题,但我找不到适合我的例子。
我想过滤一个具有特定名称的记录器。
例如
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")
我预计根记录器会过滤来自 b 的消息,因为我知道 logging.Filter 只传递 name 或 childs名字的。
但如您所料,它只是传递了所有消息。
我误解了什么?
请您参考如下方法:
如 logging 文档所述:
events which have been generated by descendant loggers will not be filtered by a logger’s filter setting, unless the filter has also been applied to those descendant logger
如果你只想关闭来自子记录器的消息,你可以设置它的级别:
logging.getLogger("a").setLevel(logging.CRITICAL + 1)
