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

时间:2017-07-31 23:04:27

标签: python python-2.7 logging

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

我想到了两种方法:

a)为每次运行代码创建一个具有唯一名称的新临时记录器实例。如果需要,请为该记录器附加一个额外的处理程序,以进行内存中的记录 这里的问题是,由于无法在Python中删除记录器,因此会出现不可避免的内存泄漏。

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

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

如果在这种情况下有任何不同,我使用的是Python 2.7。

提前致谢!

1 个答案:

答案 0 :(得分:0)

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