【发布时间】:2015-05-03 02:21:03
【问题描述】:
我有一个 python 脚本,它启动类 foo 的多个实例,然后使用 multiprocessing.pool.map 执行该类的方法“运行”,如下所示:
import multiprocessing.dummy as mp
import foo_class
def run_instance(instance):
return instance.run()
for arguments in list_of_arguments:
instances.append(foo_class.Foo(arguments))
mp.pool.map(run_instance, instances)
效果很好。给我带来麻烦的是,在类的构造函数中启动了一个记录器和文件处理程序,我希望为类的每个实例都有一个单独的日志文件:
class Foo():
def __init__(self, name):
self.logger = logging.getLogger()
self.logfile = logging.FileHandler(name + '.log')
(我省略了格式化程序和日志级别,因为它不是这个问题的一部分。)现在的问题是,通过上述方式,我得到每个实例一个日志文件,但来自所有实例的日志消息进入每个日志文件。 如果我命名记录器,如下所示:
self.logger = getLogger(name + '_logger')
那么日志消息将被正确分配给文件,但所有来自导入模块的日志消息,我在其中初始化模块记录器,如下所示:
module_logger = logging.getLogger(__name__)
将不再显示在日志文件中,因为模块记录器无法将类实例中不同名称的记录器识别为父记录器(与上述方法完美配合)。
有什么方法可以获取每个实例的日志文件,其中来自导入模块的日志消息也被写入这些文件?
【问题讨论】:
标签: python-2.7 logging python-multiprocessing