python 2.4日志记录-循环内的动态日志文件名
我试图写入一个单独的日志文件,该文件是使用basicConfig在循环中创建的。到目前为止,我只创建了一个日志文件,其中包含所有后续日志调用。我是不是遗漏了一些琐碎的东西?我查看了文档,其中有关于filemode的提示,但没有其他提示python 2.4日志记录-循环内的动态日志文件名,python,loops,logging,Python,Loops,Logging,我试图写入一个单独的日志文件,该文件是使用basicConfig在循环中创建的。到目前为止,我只创建了一个日志文件,其中包含所有后续日志调用。我是不是遗漏了一些琐碎的东西?我查看了文档,其中有关于filemode的提示,但没有其他提示 import logging class MultipleInstancesStarter: def __init__(self): pass def startMany(self): objs = [Mai
import logging
class MultipleInstancesStarter:
def __init__(self):
pass
def startMany(self):
objs = [Main(str(i)) for i in xrange(1, 10)]
print objs
for obj in objs:
obj._start()
class Main:
def __init__(self, i):
self.index = i
def _start(self):
name = self.index
logging.basicConfig(
filename="log_" + name + ".log",
filemode="w",
format="%(asctime)s - %(levelname)s - %(filename)s:%(module)s:%(lineno)d - %(message)s",
level=logging.DEBUG)
logging.debug("%s Message Debug" % name)
logging.info("%s Message Info" % name)
logging.error("%s Message Error" % name)
if __name__ == '__main__':
MultipleInstancesStarter().startMany()
这将仅创建带有第二次迭代日志条目的log_1.log。我尝试在循环外创建一个对象,它创建了一个单独的文件,但没有问题,如下所示
def startMany(self):
obj2 = Main("sample")
obj2._start()
objs = [Main(str(i)) for i in xrange(1, 10)]
print objs
for obj in objs:
obj._start()
虽然我不确定我做错了什么,但如果有任何帮助,我们将不胜感激。干杯这会有用的:
import logging
class MultipleInstancesStarter:
def __init__(self):
pass
def startMany(self):
objs = [Main(str(i)) for i in xrange(1, 10)]
print objs
for obj in objs:
obj._start()
class Main:
def __init__(self, i):
self.index = i
def _start(self):
name = self.index
logger = logging.getLogger('%s-%s' % (__name__, self.index))
handler = logging.FileHandler('log_%s.log' % name)
log_format = ('%(asctime)s - %(levelname)s - %(filename)s:'
'%(module)s:%(lineno)d - %(message)s')
formatter = logging.Formatter(log_format)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug("%s Message Debug" % name)
logger.info("%s Message Info" % name)
logger.error("%s Message Error" % name)
if __name__ == '__main__':
MultipleInstancesStarter().startMany()
这是输出(我在日志文件中使用了tail):
==>log\u 1.log log\u 2.log log\u 3.log logu 4.log logu 5.log logu 6.log logu 7.log logu 8.log logu 9.log打印对象的输出是什么?[,,,,],它们看起来都像不同的引用我的理解是basicConfig只能调用一次。一旦配置好,日志模块就会有处理程序,文档会说
如果根日志记录器已经为它配置了处理程序,那么这个函数什么都不做。
。您可能需要在完成文件日志记录后调用logging.shutdown
,以便刷新处理程序并允许使用其他文件重新配置日志记录。(底线:调用logging.shutdown()
作为\u start
的最后一行)Hmmm也没有做任何事情。我仍然在一个文件中获取所有日志调用。如果basicConfig无法完成此任务,我可以使用其他配置。干杯
handler.setLevel(logging.DEBUG)