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
中使用这些装饰器,会怎么样?这实际上给了我一个想法,我会给出一个答案:)