[英]rolling log file is not being cleared
我正在嘗試設置一個滾動日志附加程序,該附加程序每天都會進行滾動,並且在日志文件達到某個閾值大小時也會進行滾動。 我有一個工作正常的設置,但是如果我重新啟動應用程序,則翻轉行為將完全中斷。
我當前的附加器配置,基於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,並轉儲到mylog.txt
日期戳的文件之一。
但是,如果我重新啟動應用程序,事情就會變得一團糟。 主日志文件永遠不會被清除,但是會被一遍又一遍地復制,副本的大小每次都在增加。 什么都不會清除了。
我允許它運行,直到每次“翻轉”都超過500KB,遠高於我的10KB的maxFileSize
。
這種行為僅僅是錯誤嗎? 如果不是,我的配置有問題嗎? 我怎樣才能解決這個問題?
該問題是由於重新啟動(Web)應用程序時無法完全關閉回滾LoggerContext
引起的。
以我為例,該Webapp正在通過sbt中的container:start
和container:stop
停止和啟動。 這類似於在Tomcat上“部署”和“取消部署” .war
文件。 由於JVM沒有關閉,也沒有明確停止回滾,因此它能夠在主日志文件上保留鎖定。 調用container:start
之后會導致問題中描述的怪異。
完全關閉JVM, 然后運行container:start
允許記錄器/翻轉器正常運行。
在LoggerContext
應用程序的“卸載”掛鈎期間調用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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.