我有一个必须运行许多模拟运行的应用程序。我想设置一个日志记录机制,其中所有日志记录都记录在general.log中,而所有用于模拟运行的日志都进入run00001.log,…。为此,我定义了一个Run类。在__init__()新的文件句柄中添加了运行日志。
__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')
类Run在模块模型中定义如下
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)
然后,我使用程序进程浏览器来跟踪文件处理程序。而且我看到了运行日志,但从未消失。
有什么办法可以强迫我吗?
您需要调用.close()文件处理程序。
.close()
当你的Run类完成后,调用:
Run
handlers = self.log.handlers[:] for handler in handlers: handler.close() self.log.removeHandler(handler)