我有一个必须运行许多模拟运行的应用程序。我想设置一个日志记录机制,其中所有日志记录都记录在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进行日志记录;配置如下。