每个线程都创建自己的记录器实例,记录自己的事件

时间:2012-05-18 11:27:37

标签: python multithreading logging

我尝试使用Python登录。看起来,一旦线程创建了一个日志记录实例,它就不会被删除。但是,我的程序应该每分钟生成100个以上的线程,并且每个都会创建自己的记录器,这可能会导致一种内存泄漏(垃圾收集器不会收集logging.Logger个实例)。

任何人都可以帮助我吗,有没有办法将记录器用于多线程应用程序?

1 个答案:

答案 0 :(得分:2)

在python logging模块中,记录器由logging.Manager实例管理。通常只有一个日志记录管理器,可用logging.Logger.manager。记录器由其名称标识。每次使用logging.getLogger('name')时,此调用都会被转发到logging.Logger.manager.getLogger,其中包含记录器的字典,并且每次都为每个'name'返回相同的记录器。

因此,如果从线程获取记录器时不使用其他名称,则实际上每次都使用相同的记录器实例,而不必担心内存泄漏。