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

时间:2013-11-11 15:14:45

标签: python loops logging

我正在尝试写入使用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()

不确定我做错了什么,任何帮助都会受到赞赏。干杯

1 个答案:

答案 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)