gpt4 book ai didi

python 2.4日志记录-循环内的动态日志文件名

转载 作者:行者123 更新时间:2023-12-01 05:32:25 24 4
gpt4 key购买 nike

我正在尝试写入一个单独的日志文件,该文件是使用 basicConfig 在循环内创建的。到目前为止,我只创建了一个日志文件,其中包含所有后续日志记录调用。我在这里错过了一些琐碎的事情吗?我检查了文档,它有关于文件模式的提示,但没有其他提示。

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_1.log <== 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 1 Message Error

==> log_2.log <== 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 2 Message Error

==> log_3.log <== 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 3 Message Error

==> log_4.log <== 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 4 Message Error

==> log_5.log <== 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 5 Message Error

==> log_6.log <== 2013-11-12 21:08:15,866 - ERROR - test.py:test:31 - 6 Message Error

==> log_7.log <== 2013-11-12 21:08:15,867 - ERROR - test.py:test:31 - 7 Message Error

==> log_8.log <== 2013-11-12 21:08:15,867 - ERROR - test.py:test:31 - 8 Message Error

==> log_9.log <== 2013-11-12 21:08:15,867 - ERROR - test.py:test:31 - 9 Message Error

基本上,如果日志记录部分变得有点棘手,请使用不同的记录器,在这种情况下每个实例使用一个记录器。一个good article阅读 Python 文档

编辑:我忘记添加日志级别。为此,您可以在将处理程序添加到记录器之前添加此内容

handler.setLevel(logging.DEBUG)

关于python 2.4日志记录-循环内的动态日志文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19909664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com