如何在多个模块中使用logging.getLogger(__ name__)

如何在多个模块中使用logging.getLogger(__ name__),第1张

如何在多个模块中使用logging.getLogger(__ name__)

正如@shmee在此答案中指出的那样,必须在记录器名称中使用点符号显式定义记录器层次结构。也就是说,如果in中的记录器名称

main_module.py
'a'
,则in的记录器名称
auxiliary_module.py
必须为
'a.b'
(而不仅仅是
'b'
),以便它继承logger的配置
'a'
getLogger()
文档中也提到了这一点。

然而,这应该会自动使用时的照顾

__name__
,如在提到
logging
如何做:

这意味着记录器名称跟踪程序包/模块的层次结构,并且从记录器名称中记录事件的地方就很明显了。

问题是,要使其正常工作,您需要以

__name__
正确的方式使用,而我没有这样做。

我的示例中的问题在于

cookbook-example
package文件夹中文件的组织:

主模块和辅助模块都处于同一级别(即,在同一文件夹中)。所以,作为解释这里的

__name__
主模块将是
'__main__'
(因为它是顶级脚本),以及
__name__
用于辅助模块会
'auxiliary_module'
(即文件名),NOT
'__main__.auxiliary_module'

结果,辅助模块中的logger将是root logger的子级,而不是logger的子级

'__main__'
,因此它将继承root
logger配置(仍具有默认的日志记录级别
WARNING
),而不是在中指定的配置。主模块。

因此,为使示例正常工作,我们有几种选择:

  1. 更换

    getLogger(__name__)
    主要 的模块
    getLogger()
    。如@shmee所建议的那样,这会将配置应用于根记录器,从而也应用于辅助模块记录器。

  2. 替换

    getLogger(__name__)
    辅助 由模块
    getLogger('__main__.' + __name__)
    。结果将与原始食谱示例相同(除了现在调用主记录器
    '__main__'
    代替
    'spam_application'
    )。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5431483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存