为同时存在的不同Python对象登录到不同的文件
对于下面的MWE,我希望能够创建两个为同时存在的不同Python对象登录到不同的文件,python,logging,python-logging,Python,Logging,Python Logging,对于下面的MWE,我希望能够创建两个ModelObjects,然后在以后运行model对象。实际上,有数量未知的ModelObjects和许多步骤组成了run操作,但这涵盖了这个概念 我想从日志中得到的是一个.log文件,该文件记录单个ModelObject的所有日志信息、警告等,而不记录其他模型的任何信息 import logging class ModelObject(object): def __init__(self, i): self.i = i
ModelObject
s,然后在以后运行model对象。实际上,有数量未知的ModelObject
s和许多步骤组成了run
操作,但这涵盖了这个概念
我想从日志中得到的是一个.log
文件,该文件记录单个ModelObject
的所有日志信息、警告等,而不记录其他模型的任何信息
import logging
class ModelObject(object):
def __init__(self, i):
self.i = i
self.logger = logging.getLogger('driver')
self.logger.setLevel(logging.INFO)
fh = logging.FileHandler('logs/log_'+str(self.i)+'.log')
self.logger.addHandler(fh)
self.logger.info('finished initialization in %s' % self.i)
def run(self):
self.logger.info('running job in %s' % self.i)
if __name__ == '__main__':
objs_list = []
for i in range(2):
objs_list.append(ModelObject(i))
## later, want to run the jobs
for i in range(2):
objs_list[i].run()
MWE正确生成日志文件logs/log_0.log
和logs/log_1.log
,但在创建日志后,所有信息都会记录到每个文件中
# log_0.log
finished initialization in 0
finished initialization in 1
running job in 0
running job in 1
如何仅为单个对象(即每个对象的self.logger
)写入单个日志文件?我认为您的问题来自logging
返回相同的日志对象这一事实。从python文档中:
然后,您将添加文件处理程序,这些处理程序应该将单独的对象添加到一个对象中,以便将其记录到相同的文件中
你想做的可能是
self.logger=logging.getLogger(str(i))
哇,我甚至在文档中读到了这一点,并对自己说“不,它们有不同的名称”,因为我考虑的是文件名,而不是getLogger
调用。哼!非常感谢,现在一切正常。
# log_1.log
finished initialization in 1
running job in 0
running job in 1