我正在尝试写入使用basicConfig在循环内创建的单独日志文件。到目前为止,我设法只创建一个日志文件,其中包含所有后续日志记录调用。我在这里错过了一些小事吗?我检查了它有关于filemode的提示但没有别的。
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()
不确定我做错了什么,任何帮助都会受到赞赏。干杯
答案 0 :(得分:2)
这将有效:
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_1.log< == 2013-11-12 21:08:15,866 - 错误 - test.py:test:31 - 1消息错误
==> log_2.log< == 2013-11-12 21:08:15,866 - 错误 - test.py:test:31 - 2消息错误
==> log_3.log< == 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 3消息错误
==> log_4.log< == 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 4消息错误
==> log_5.log< == 2013-11-12 21:08:15,866 - 错误 - test.py:test:31 - 5消息错误
==> log_6.log< == 2013-11-12 21:08:15,866 - 错误 - test.py:test:31 - 6消息错误
==> log_7.log< == 2013-11-12 21:08:15,867 - ERROR - test.py:test:31 - 7消息错误
==> log_8.log< == 2013-11-12 21:08:15,867 - ERROR - test.py:test:31 - 8消息错误
==> log_9.log< == 2013-11-12 21:08:15,867 - ERROR - test.py:test:31 - 9消息错误
基本上,如果日志记录部分变得有点棘手,请使用不同的记录器,在这种情况下为每个实例使用一个记录器。要阅读Python文档的good article
编辑:我忘了添加日志级别。为此,您可以在将处理程序添加到记录器
之前添加此项handler.setLevel(logging.DEBUG)