2015-12-14 62 views
0

我有一个项目包含我想登录到同一位置的几个模块。我已经设置了一个特定的模块,例如log.py,我已经指定了格式化规则和我希望写入日志的位置。模块之间的Python共享记录器配置

到现在为止我一直在进口我在log.py创建到使用它需要的模块记录器,并从那里调用它们,如python logging howto

指定的现在,我希望每一个模块I导入改变我的记录器的名字它进入,以便能够从哪个模块中得知特定的消息。

什么是最好的方法来做到这一点?我应该继承我的记录器,并重新定义记录器的名称与模块的__name__有没有更好的方法来做到这一点?

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

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

下面是我如何使用它的例子:我反正这样就知道

from log_behavior import logger as log 

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

回答

0

日志记录配置,那么就持续性作为配置这应该适用于所有子模块。

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

+0

问题是我首先用'logging.getLogger('my_logger')'创建一个记录器,然后配置该记录器。没有它,我不能设置处理程序。我想对这个配置进行分类,只是改变名称,但在每个模块中调用整个配置例程有点长。 – chiffa

+0

我说的是从日志记录中创建一个全局basicConfig,并且应该坚持记录您创建后的记录。只要在要登录的每个模块中导入日志记录,甚至不需要多次导入logging_behaviour。在日志记录中设置配置而不是按日志记录器应该可以解决该问题。 – OnGle

+0

问题是,对我来说basicConfig没有提供足够的选项,所以我必须使用为记录器实例保留的方法。我想最后我会导入一个记录器生成功能,无论我需要它。 – chiffa