Python - 用于选择性内存中日志记录的临时记录器

问题描述:

我有一些写入一些日志的Python代码(使用标准logging模块)。在大多数情况下,我希望日志只传播到上层记录器,但有时我还需要将日志写入内存中的流(例如StringIO)以供稍后检索。Python - 用于选择性内存中日志记录的临时记录器

我想到的两种方法是:

一)与代码每次运行的唯一名称创建一个新的临时记录器实例。如果需要,请将附加处理程序附加到该记录器以进行我的内存记录。
这里的问题是,由于没有办法在Python中删除记录器,我得到了不可避免的内存泄漏。

b)为记录调用logger.log的包装函数,如果需要,还执行内存中日志记录。
这里的问题是我丢失了关于执行日志记录的文件名和行号的信息,因为logging模块认为它是从包装器调用的。

这个问题最好的解决方法是什么?

如果这在这种情况下有所不同,我使用Python 2.7。

在此先感谢!

+0

我过去所做的事情,并不是说这是正确的做法,而是创建一个日志记录功能,将所有处理程序作为第一个操作之一删除。之后,它遵循严格的'try'和'except'语句,其中记录了不同级别的信息的情景记录处理程序。 – NoOrangeJuice

我发现了一种方法来避免第一种方法中的内存泄漏。其关键是通过实例化Logger类而不是调用logging.getLogger来手动创建记录器。这样临时记录器不会在中央注册表中注册,因此可以进行垃圾收集。