从导入的模块处理记录器
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")
.
我正在开发一个包,我为其编写了自己的自定义记录器,并向其中添加了一个 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")
.