我能够找到解决我自己问题的方法。我曾经创建过过滤器(我正在使用 dictConfig)。原来是这样的
{
"formatters": {"myformatter": "..."}
"handlers": {
"handlerA": {
"class": "myapp.logging.HandlerA",
"level": "INFO",
"formatter": "myformatter",
"filters": [
"myfilter"
]
}
"handlerB": {
"class": "myapp.logging.HandlerB",
"level": "INFO",
"formatter": "myformatter",
"filters": [
"myfilter"
]
}
},
"filters": {
"myfilter": {
"()": "myapp.logging.MyFilter"
}
}
"loggers": {
"myapp": {
"handlers": [
"handlerA",
"handlerB"
],
"level": "INFO"
}
}
}
这导致myfilter 实例被创建一次并被共享。我没有重新实现该类两次或需要跟踪哪个处理程序正在发送记录,而是创建了一个链接到同一对象的新过滤器 id,这当然创建了过滤器对象的一个新实例,我在我的示例中称为 @987654323 @:
{
"formatters": {"myformatter": "..."}
"handlers": {
"handlerA": {
"class": "myapp.logging.HandlerA",
"level": "INFO",
"formatter": "myformatter",
"filters": [
"myfilter"
]
}
"handlerB": {
"class": "myapp.logging.HandlerB",
"level": "INFO",
"formatter": "myformatter",
"filters": [
"myotherfilter"
]
}
},
"filters": {
"myfilter": {
"()": "myapp.logging.MyFilter"
},
"myotherfilter": {
"()": "myapp.logging.MyFilter"
}
}
"loggers": {
"myapp": {
"handlers": [
"handlerA",
"handlerB"
],
"level": "INFO"
}
}
}