gpt4 book ai didi

java - 滚动日志文件未被清除

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:40 28 4
gpt4 key购买 nike

我正在尝试设置一个滚动日志附加程序,它将每天滚动,并在日志文件达到特定阈值大小时滚动。我已经有了一个大部分工作的设置,但是如果我重新启动应用程序,翻转行为就会完全中断。

我当前的附加程序配置,基于 http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP

<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${my.log.dir}/mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${my.log.dir}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 10KB -->
<maxFileSize>10KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%-5level %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>

我添加了一个“LogSpammer”脚本来快速生成日志数据,第一次运行该应用程序时,一切看起来都很好。 mylog.txt 达到约 10KB 并被转储到带有日期标记的文件之一。

Log files the first time I run. Everything seems ok

但是如果我重新启动应用程序,事情就会变得困惑。主日志文件永远不会被清除,但它会被一遍又一遍地复制,并且每次副本的大小都会增加。一切都不再被清除。

Log files the second time I run. File sizes keep growing. Not good!

我允许它运行,直到每次“翻转”超过 500KB,远高于我的 maxFileSize 10KB。

这种行为只是一个错误吗?如果不是的话,是我配置有问题吗?我该如何解决这个问题?

最佳答案

该问题是由于(Web)应用程序重新启动时未能完全关闭 logback LoggerContext 引起的。

就我而言,网络应用程序是通过 sbt 中的 container:startcontainer:stop 停止和启动的。这类似于在 Tomcat 上“部署”和“取消部署”.war 文件。由于 JVM 没有关闭,logback 也没有显式停止,因此它能够保留对主日志文件的锁定。之后调用 container:start 会导致问题中描述的奇怪现象。

完全关闭 JVM,然后运行 container:start 允许记录器/翻转正常运行。

在 web 应用程序的“unload” Hook 期间调用 LoggerContextstop 方法可以解决该问题:

// I happened to be using slf4j's, so I use its LoggerFactory
// class to get the LoggerContext instance
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.stop();

关于java - 滚动日志文件未被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34880841/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com