当前位置: 首页 > 面试题库 >

python不会将文件句柄释放到日志文件

拓拔松
2023-03-14
问题内容

我有一个必须运行许多模拟运行的应用程序。我想设置一个日志记录机制,其中所有日志记录都记录在general.log中,而所有用于模拟运行的日志都进入run00001.log,…。为此,我定义了一个Run类。在__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()文件处理程序。

当你的Run类完成后,调用:

handlers = self.log.handlers[:]
for handler in handlers:
    handler.close()
    self.log.removeHandler(handler)


 类似资料:
  • 问题内容: 编辑:由于似乎没有解决方案,或者我正在做一些人都不知道的非标准操作-我将修订我的问题,并问:当python应用正在制作日志时,完成记录的最佳方法是什么?很多系统调用? 我的应用程序有两种模式。在交互模式下,我希望所有输出都转到屏幕以及日志文件中,包括所有系统调用的输出。在守护程序模式下,所有输出进入日志。守护程序模式使用时效果很好。我找不到在不修改每个系统调用的情况下以交互方式将所有输

  • 问题内容: 我正在尝试针对JAVA中的XSD文件验证XML文件。我的问题不是验证本身,因为这可以正常工作。我的问题是,验证后没有释放XMLfile。如果以后尝试访问该文件,则会收到错误“该文件已被其他资源使用”。 仅当验证失败时才会发生此错误(validator.validate(xmlSource)抛出了一个异常;)如果对文件进行了验证而没有问题,则该文件将被释放并且可以被其他人访问。 有想法吗

  • 3)是否有任何方法告诉journald从特定文件中获取日志? 4)如果没有,有什么变通办法吗?

  • 和 因为该类在JDBC包中。那我就这么做 Edit2:因为我在控制台中获得的日志消息看起来与logback.xml中的日志消息不同,所以它看起来完全忽略了我的logback.xml。

  • 我们使用logback进行日志记录,并且在类路径中有以下JAR JCL-over-SLF4J-1.7.7.jar Logback-Classic-1.1.3.jar Logback-Core-1.1.3.jar SLF4J-API-1.7.7.jar Janino-2.7.8.jar 现在,当我部署我的应用程序时,我确实在application.xxx.log文件中看到了来自spring框架的日志

  • 我正在从事一个Spring Hibernate项目,其中包含Spring AMQP RabbitMQ消息传递实现。rabbitmq配置位于一个单独的xml中,该xml被导入到根应用程序上下文中。rabbitmq侦听器接收器每秒轮询一次队列。重要的日志消息被大量的调试级轮询消息隐藏在日志文件中。 有没有办法将轮询日志分离到另一个文件中,或者阻止它污染日志? 我使用log4j进行日志记录;配置如下。