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