我正在使用通过我的应用程序中的字典配置的标准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
包含最后的所有日志消息。我的问题是:
do_task
函数运行,即日志消息不会出现在另一个任务的日志中我已经使用多处理模块测试过(1)它看起来确实没问题,但确认会很好。