如何防止多模块项目中的模块重新配置根记录程序?

时间:2018-09-22 16:01:40

标签: python python-2.7 logging

我正在将python 2.7用于多模块项目。如here所述,我已经在main.py中配置了登录,如下所示:

logging.basicConfig(
    format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
    datefmt='%d-%m-%Y:%H:%M:%S',
    filename='/home/ubuntu/logs/centralized_upgrade.log',
    level=logging.INFO)

在其他任何我必须登录的模块中,我都像下面这样打电话

import logging
...
logging.info('Hello World')

但是我的疑问是,是否在某个模块中再次重新配置了根记录器(可能如下所示)

logging.basicConfig(
        format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
        datefmt='%d-%m-%Y:%H:%M:%S',
        filename='/home/ubuntu/logs/module.log',
        level=logging.INFO)

然后所有日志消息将开始进入新文件。有人可以让我知道处理此问题的最佳方法是什么?如何防止重新配置root记录器?我的意图是,无论在任何子模块中进行任何重新配置​​,日志记录配置都应保持与main.py中定义的相同。

在许多地方,建议不要使用root记录器,而是像here那样定义记录器。但是根据我的理解,在这种情况下,如果某个模块配置了根记录器,那么由于所有记录器都是从根记录器继承的,因此日志可能会转到另一个文件。

1 个答案:

答案 0 :(得分:0)

在此处发布@Lukas Graf的评论作为答案

  

不是完整的答案,但是:logging.basicConfig不会做任何事情   如果根记录器已经为它配置了处理程序。所以如果   多次调用,只有第一个会应用给定的   配置到根记录器。