【问题标题】:Python share logger configuration between modulesPython 在模块之间共享记录器配置
【发布时间】:2015-12-14 22:46:45
【问题描述】:

我有一个包含多个模块的项目,我想登录到同一个位置。我已经设置了一个特定的模块,比如log.py,我在其中指定了格式规则和我希望写入日志的位置。

到目前为止,我一直将在log.py 中创建的记录器导入需要使用它的模块中,并从那里调用它们,如python logging howto 中指定的那样

现在我想在我导入它的每个模块中更改记录器的名称,以便能够分辨出特定消息来自哪个模块。

最好的方法是什么?我应该将我的记录器子类化并使用模块的__name__ 重新定义记录器的名称吗?有更好的方法吗?

这是我的记录器定义的一个元素:

logger = logging.getLogger('main_logger')
logger.setLevel(logging.DEBUG)

以下是我如何使用它的示例:

from log_behavior import logger as log

[....]
log.info('mymessage')

【问题讨论】:

    标签: python logging


    【解决方案1】:

    据我所知,日志配置是持久的,就配置而言,这应该适用于所有子模块。

    logging.basicConfig(format='%(module)s-%(levelname)s: %(message)s',level=logging.DEBUG)
    logger = logging.getLogger('project.logging_behaviour')
    

    可在此处找到更多格式选项 https://docs.python.org/2/library/logging.html#logrecord-attributes

    我不知道是否有必要,但最好将记录器命名为与绝对命名模块相同的名称。例子。 project.logging_behaviourproject.sub_module.sub_sub_module

    【讨论】:

    • 问题是我先用logging.getLogger('my_logger')创建了一个记录器,然后配置了那个记录器。没有它,我无法设置处理程序。我想继承该配置,只是更改名称,但是在每个模块中调用整个配置例程有点长。
    • 我的意思是从日志中创建一个全局的 basicConfig 并且应该持续到你以后创建的记录器中。只要您在要登录的每个模块中导入日志记录,您甚至不需要多次导入 logging_behaviour。在日志记录而不是每个记录器中设置配置应该可以解决该问题。
    • 问题是对我来说 basicConfig 没有提供足够的选项,所以我必须使用为记录器实例保留的方法。我想最后我会在需要的地方导入一个记录器生成函数。
    • basicConfig需要哪些设置?您只要求记录模块名称?检查此处以查看 basicConfig docs.python.org/2/library/logging.html#logging.basicConfig 中的不同选项。
    猜你喜欢
    • 2010-12-13
    • 2017-09-28
    • 1970-01-01
    • 2012-10-26
    • 2016-08-03
    • 2018-04-21
    • 2017-12-18
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多