【问题标题】:Handling logger from imported module处理来自导入模块的记录器
【发布时间】:2019-12-25 02:56:06
【问题描述】:

我正在开发一个包,我为此编写了自己的自定义记录器,并在其中添加了FileHandlerStreamHandler。这可以正常工作,并且流日志和文件日志是所需的。到目前为止一切顺利。

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

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

如果我对此发表评论,那么我的日志记录将再次正常工作。

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

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

【问题讨论】:

    标签: python-3.x python-logging


    【解决方案1】:

    我同意在模块中调用 logging.basicConfig() 而不是在模块中

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

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

    您还可以找出违规模块正在使用的“记录器名称”,并在您的代码中覆盖其记录级别。

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

    【讨论】:

    • 谢谢,虽然我使用的是StreamHandler,所以我无法拨打logging.basicConfig(..., force=True)。我想我会尝试其他的。
    • 在这种情况下,您可以删除违规处理程序,如:stackoverflow.com/questions/7812263/…
    猜你喜欢
    • 2021-09-12
    • 2015-05-03
    • 2015-05-15
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    相关资源
    最近更新 更多