从导入的模块处理记录器

Handling logger from imported module

我正在开发一个包,我为其编写了自己的自定义记录器,并向其中添加了一个 FileHandler 和一个 StreamHandler。这工作正常,并且流日志和文件日志符合需要。到目前为止一切顺利。

但现在我导入了某个外部库,一旦我这样做,我所有的日志语句就开始打印两次。查看该库的源代码,我在其中一个文件中看到它正在做

logging.basicConfig(level=log_level, format=format_string)

如果我发表评论,那么我的日志记录又可以正常工作了。

我无法访问这个导入库的源代码,它是外部的。防止这种情况发生的正确方法是什么?

另外,一般来说,如果我正在编写一个可以被其他库导入的模块,那么 logging.basicConfig(...) 是一种不好的做法吗?

我同意不在

中时在模块中进行 logging.basicConfig() 调用

if __name__ == '__main__'上下文通常是不礼貌的。

也就是说,您可以在代码中调用 logging.basicConfig(..., force=True)(或 logging.config.dictConfig())并进行设置。您的调用将覆盖现有设置。

您还可以找出 "logger name" 有问题的模块正在使用什么,并在您的代码中覆盖其日志记录级别。

logging.getLogger("offending.modules.logger.name").setLevel("CRITICAL").