python中不同模块的多个日志文件
我有三个不同的模块,让我们调用python中不同模块的多个日志文件,python,python-3.x,logging,Python,Python 3.x,Logging,我有三个不同的模块,让我们调用ModuleA,ModuleB和Common。Common模块包含ModuleA和ModuleB都需要的一些辅助方法 我想为每个模块维护单独的日志文件,这意味着应该有ModuleA.log和ModuleB.log。所以在每个模块中,我都创建了一个带有文件处理程序和相应文件名的logger对象 现在的问题是,如果我从ModuleA调用Common中的方法,那么Common中的日志事件应该添加到ModuleA.log中,如果我从ModuleB调用方法,Common中的日
ModuleA
,ModuleB
和Common
。Common
模块包含ModuleA
和ModuleB
都需要的一些辅助方法
我想为每个模块维护单独的日志文件,这意味着应该有ModuleA.log
和ModuleB.log
。所以在每个模块中,我都创建了一个带有文件处理程序和相应文件名的logger对象
现在的问题是,如果我从ModuleA
调用Common
中的方法,那么Common
中的日志事件应该添加到ModuleA.log
中,如果我从ModuleB
调用方法,Common
中的日志事件应该附加到ModuleB.log
。为此,目前我正在将一个对应的logger
对象作为Common
模块中方法的参数传递,我觉得这不是一个好的解决方案
有什么方法/模式可以处理这种情况吗?您可以在
Common
中有一个缓存dict,其他模块可以导入和修改它
下面是一个字符串的快速示例:
Common.py
CACHE = {'logger': None}
def func():
print(CACHE['logger'])
from Common import CACHE, func
CACHE['logger'] = 'mod a'
func()
#mod a
from Common import CACHE, func
CACHE['logger'] = 'mod b'
func()
#mod b
模块a.py
CACHE = {'logger': None}
def func():
print(CACHE['logger'])
from Common import CACHE, func
CACHE['logger'] = 'mod a'
func()
#mod a
from Common import CACHE, func
CACHE['logger'] = 'mod b'
func()
#mod b
ModuleB.py
CACHE = {'logger': None}
def func():
print(CACHE['logger'])
from Common import CACHE, func
CACHE['logger'] = 'mod a'
func()
#mod a
from Common import CACHE, func
CACHE['logger'] = 'mod b'
func()
#mod b
如果使用dict感觉有点混乱,我认为您可以创建一个类来处理您需要的特定位,它只需要就地更新而不是设置新值。这可能并不理想,这取决于文件包含的内容,但是如果您可以将
Common
的重要部分转换为一个类来继承,我想你可以在其他两个类中重写self.logger。@Peter我找到你了。但是,如果我有一些常见的装饰器,并且想在模块a
或模块b
中使用这些装饰器,会怎么样?这实际上给了我一个想法,我会给出一个答案:)