日志使用faust打印两次



使用pythonFaust,我所有的日志都翻倍了。

由于记录器是分层的,我想防止下游记录器father.son记录任何内容,并将所有日志传播到上游father记录器。

我试着:

1 -当调用main时,将dictConfig中的disable_existing_loggers设置为True

2 -使用dictConfig:

为特定的记录器名称添加过滤器(在处理程序中)
class LogPreventingFilter(logging.Filter):
def filter(self, record):
return False
logging_config = {
'version': 1,
'disable_existing_loggers': True,
'filters': {
'log_preventing_filter': {
'()': LogPreventingFilter
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'filters': ['log_preventing_filter']
}
},
'loggers': {
'father.son': {
'level': 'DEBUG',
'handlers': ['console']
}
}
}
dictConfig(logging_config)

3 -添加相同的logging_config到faust的应用程序配置logging_config(有和没有'disable_existing_loggers': True) -在这种情况下,我可以看到日志记录器我提到的(father.son),但不是从father,即使我添加了father记录器到faust配置),也不是日志从任何其他非层次记录器(如getLogger("some_name_not_related_to_father"))。

我会提到,我试图删除过滤器和处理程序,但它没有做出任何改变。

值得一提的是,只有在我调用faust的app.main()之后,日志才开始翻倍。

还值得一提的是,我想实际记录数据的记录器都来自导入的模块,而不是faust可见的代码的一部分。只有father.son日志记录器。

我代码:

some.imported.module

father_logger = logging.getLogger("father")
some_other_logger = logging.getLogger("not_hierarchiali_related")
class MyGenericClass:
// add filters and handlers and do some generic stuff 

stream_processing_module

son_logger = logging.getLogger("father.son")
async def processing_function():
// do some stuff
son_logger.info("log this and that")

模块使用faust:


son_logger = logging.getLogger("father.son")
@app.agent
async def stream_processing():
// call the processing_function() for the other module for each record
son_logger.info("log some data")
if __name__ == "main":
son_logger.info("start")
with MyGenericClass:
app.main()

注意只有son_logger对faust是可见的。但是,我希望父日志记录器执行打印,而不是子日志记录器。

任何想法?谢谢!

我在Faust日志手册中发现,应用程序写入独立的root_logger(在python应用程序上调用logging.getLogger()时无法获得它),并且必须在启动faust应用程序(app.main())之前在应用程序配置(logging_config)中设置至少一个处理程序。如果你没有设置根日志记录器,Faust会为你做,并且可能会在python应用上下文中打印日志,并在Faust应用上下文中打印相同的日志。

相关内容

  • 没有找到相关文章

最新更新