我有一个应用程序,它必须运行一些模拟运行。我想设置一个日志记录机制,其中所有日志记录都记录在一个general.log中,模拟运行的所有日志都转到run00001.log,...为此,我定义了一个类运行。在__init__()中,为运行日志添加了一个新的文件句柄。
问题是,运行的日志文件永远不会被释放,因此在多次运行之后,可用句柄耗尽,运行崩溃。
我已经设置了一些例程来测试它,如下所示
主程序
import Model
try:
myrun = Model.Run('20130315150340_run_49295')
ha = raw_input('enter')
myrun.log.info("some info")
except:
traceback.print_exc(file=sys.stdout)
ha = raw_input('enter3')类运行在模块模型中定义如下
import logging
class Run(object):
""" Implements the functionality of a single run. """
def __init__(self, runid):
self.logdir="."
self.runid = runid
self.logFile = os.path.join(self.logdir , self.runid + '.log')
self.log = logging.getLogger('Run'+self.runid)
myformatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
myhandler = logging.FileHandler(self.logFile)
myhandler.setLevel(logging.INFO)
myhandler.setFormatter(myformatter)
self.log.addHandler(myhandler) 然后,我使用程序进程资源管理器来跟踪文件处理程序。我看到运行日志出现,但永远不会消失。
有没有办法我可以强迫你这么做?
发布于 2013-03-18 18:29:14
您需要在文件处理程序上调用.close()。
当您的Run类完成时,调用:
handlers = self.log.handlers[:]
for handler in handlers:
handler.close()
self.log.removeHandler(handler)https://stackoverflow.com/questions/15435652
复制相似问题