【发布时间】:2015-01-24 17:59:09
【问题描述】:
我有一个关于登录 Python 的问题。情况如下:我的应用程序有一个全局上下文对象(单例),其中包括一个记录器对象。所有需要使用日志记录的类都可以从上下文中获取这个全局记录器对象,并使用它来输出消息。
但是,一些包含此类记录器的对象需要保存到 pickle 文件中。当腌制对象具有对打开的 FileHandler 的引用时,保存到腌制不起作用,在这种情况下,对象就是这种情况,因为它们拥有记录器,因此是打开的文件处理程序。
现在,我可以在酸洗之前删除所有文件处理程序,如下所示:
def closeLogFile(self):
handlers = self.logger.handlers[:]
for handler in handlers:
handler.close()
self.logger.removeHandler(handler)
但这有一个副作用,即对于仍然持有对全局记录器的引用的所有其他对象,日志处理程序也会被删除。
有什么更好的方法既允许全局记录到同一个文件又允许酸洗单个类?
提前一百万谢谢。
干杯,
马丁
【问题讨论】: