簡體   English   中英

滾動日志文件未清除

[英]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:startcontainer:stop停止和啟動。 這類似於在Tomcat上“部署”和“取消部署” .war文件。 由於JVM沒有關閉,也沒有明確停止回滾,因此它能夠在主日志文件上保留鎖定。 調用container:start之后會導致問題中描述的怪異。

完全關閉JVM, 然后運行container:start允許記錄器/翻轉器正常運行。

LoggerContext應用程序的“卸載”掛鈎期間調用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM