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

标签 python loops logging

我正在尝试写入一个单独的日志文件,该文件是使用 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/

相关文章:

ios - 如何从未崩溃的已部署 iOS 应用程序获取日志文件?

python - 如何查看字符串是否在列表中然后更新字符串

python - opencv 在 osx 上安装没有合适的图像错误

java - 在 Java 的 for 循环中使用 Println 函数?

java - 后递增运算符在 for 循环中不递增

android - 部署后写入日志的 Android 最佳方法是什么?

java - 将 System.out.println 重定向到日志

python - 如何选择 LSTM Keras 参数?

Python 安装工具 : Distribute configuration files to OS specific directories

java循环 - 在循环外/内声明类