我有一些Python代码可以编写一些日志(使用标准的logging
模块)。在大多数情况下,我希望日志只是传播到上层记录器,但有时我还需要将日志写入内存中的流(例如StringIO
)以便以后检索。
我想到了两种方法:
a)为每次运行代码创建一个具有唯一名称的新临时记录器实例。如果需要,请为该记录器附加一个额外的处理程序,以进行内存中的记录 这里的问题是,由于无法在Python中删除记录器,因此会出现不可避免的内存泄漏。
b)创建一个包装函数,用于记录调用logger.log
,如果需要,还可以执行内存中的记录。
这里的问题是我丢失了有关执行日志记录的文件名和行号的信息,因为logging
模块认为它是从包装器调用的。
这个问题的最佳解决方法是什么?
如果在这种情况下有任何不同,我使用的是Python 2.7。
提前致谢!
答案 0 :(得分:0)
我找到了一种避免第一种方法中的内存泄漏的方法。它的关键是通过实例化Logger
类而不是调用logging.getLogger
来手动创建记录器。这样,临时记录器不会在集中式注册表中注册,因此可以进行垃圾回收。