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

python 2.4日志记录-循环内的动态日志文件名,python,loops,logging,Python,Loops,Logging,我试图写入一个单独的日志文件,该文件是使用basicConfig在循环中创建的。到目前为止,我只创建了一个日志文件,其中包含所有后续日志调用。我是不是遗漏了一些琐碎的东西?我查看了文档,其中有关于filemode的提示,但没有其他提示 import logging class MultipleInstancesStarter: def __init__(self): pass def startMany(self): objs = [Mai

我试图写入一个单独的日志文件,该文件是使用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()
虽然我不确定我做错了什么,但如果有任何帮助,我们将不胜感激。干杯

这会有用的:

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)