Java 未清除滚动日志文件

Java 未清除滚动日志文件,java,logging,logback,Java,Logging,Logback,我正在尝试设置一个滚动日志附加器,它每天都会滚动,当日志文件达到某个阈值大小时也会滚动。我有一个基本正常的设置,但是如果我重新启动应用程序,滚动行为就会完全中断 我当前的appender配置,基于 但是如果我重新启动应用程序,事情就会变得一团糟。主日志文件永远不会被清除,但它会被一次又一次地复制,每次复制的大小都会增加。再也没有什么东西被清除了 我允许它运行,直到每次“滚动”都超过500KB,远远高于我的maxFileSize10KB 这种行为仅仅是一个bug吗?如果没有,我的配置是否有问题

我正在尝试设置一个滚动日志附加器,它每天都会滚动,当日志文件达到某个阈值大小时也会滚动。我有一个基本正常的设置,但是如果我重新启动应用程序,滚动行为就会完全中断

我当前的appender配置,基于

但是如果我重新启动应用程序,事情就会变得一团糟。主日志文件永远不会被清除,但它会被一次又一次地复制,每次复制的大小都会增加。再也没有什么东西被清除了

我允许它运行,直到每次“滚动”都超过500KB,远远高于我的
maxFileSize
10KB


这种行为仅仅是一个bug吗?如果没有,我的配置是否有问题?如何修复此问题?

此问题是由于在重新启动(web)应用程序时未能完全关闭logback
LoggerContext
导致的

在我的例子中,webapp是通过sbt中的
container:start
container:stop
停止和启动的。这类似于在Tomcat上“部署”和“取消部署”一个
.war
文件。由于JVM没有关闭,也没有显式停止回写,因此它能够在主日志文件上保留一个锁。调用
container:start
之后会导致问题中描述的奇怪

完全关闭JVM,然后运行
container:start
允许记录器/滚动正常工作

在webapp的“unload”钩子期间调用
LoggerContext
stop
方法可以解决以下问题:

// 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();

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

在我的例子中,webapp是通过sbt中的
container:start
container:stop
停止和启动的。这类似于在Tomcat上“部署”和“取消部署”一个
.war
文件。由于JVM没有关闭,也没有显式停止回写,因此它能够在主日志文件上保留一个锁。调用
container:start
之后会导致问题中描述的奇怪

完全关闭JVM,然后运行
container:start
允许记录器/滚动正常工作

在webapp的“unload”钩子期间调用
LoggerContext
stop
方法可以解决以下问题:

// 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();