Python日志记录:捕获一部分日志消息?

时间:2015-01-16 16:39:37

标签: python logging

我正在使用通过我的应用程序中的字典配置的标准RotatingFileHandler。这非常有效。

我的应用程序中有一部分同时处理数千个任务。我希望能够掌握与给定任务相关的所有日志消息,并将其与该任务保持一致,以便以后更好地诊断问题。

每个任务都在自己的线程上处理,同时处理多个任务。

看到这篇文章,Including previously logged events in a new logging handler我尝试在任务开始时向我的记录器添加MemoryHandler,然后在最后将其删除,如下所示:

import logging.handlers
import StringIO

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def do_task():
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

    s = StringIO.StringIO()
    streamhandler = logging.StreamHandler(s)
    streamhandler.setFormatter(formatter)
    memoryhandler = logging.handlers.MemoryHandler(1024*10, logging.DEBUG, streamhandler)
    logger.addHandler(memoryhandler)    

    logger.info("a log message")

    memoryhandler.flush()
    memoryhandler.close()
    logger.removeHandler(memoryhandler)    

这似乎有效。 s包含最后的所有日志消息。我的问题是:

  1. 这是否适用于多个线程,每个线程都通过do_task函数运行,即日志消息不会出现在另一个任务的日志中
  2. 这是最好的方法吗?
  3. 我已经使用多处理模块测试过(1)它看起来确实没问题,但确认会很好。

0 个答案:

没有答案