【发布时间】:2018-09-22 16:01:40
【问题描述】:
我将 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)
然后所有日志消息将开始进入新文件。有人可以让我知道处理此问题的最佳方法是什么吗?如何防止重新配置根记录器?我的意图是日志配置应该与main.py 中定义的相同,而不管在任何子模块中进行的任何重新配置。
在很多地方,建议不要使用 root logger,并定义一个像 here 提到的 logger。但是根据我在这种情况下的理解,如果某些模块配置了根记录器,那么日志可能会转到不同的文件,因为所有记录器都从根记录器继承。
【问题讨论】:
-
不是一个完整的答案,但是:如果根记录器已经为它配置了处理程序,
logging.basicConfig将不会做任何事情。所以如果它被多次调用,只有第一个会将给定的配置应用到根记录器。 -
真正的(如果没用的话)答案是“不要使用粗心大意以至于无条件改变全局状态的模块”,无论是根记录器、进程的信号处理还是标准流。
-
感谢@LukasGraf,这对我有用。
标签: python python-2.7 logging