Logback:SizeAndTimeBasedRollingPolicy不遵守totalSizeCap

Bra*_*man 12 java logging logback

我正在尝试以一种方式管理我的日志记录,在这种方式中,我的最旧的归档日志文件一旦达到总累积大小限制或达到其最大历史记录限制就会被删除.当使用SizeAndTimeBasedRollingPolicy中的logback 1.1.7,滚动文件附加目的地将继续,尽管超出的创造新的档案totalSizeCap集.

这是我的logback.xml文件供参考:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="file"
        class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>${USERPROFILE}/testlogs/test.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>
                ${USERPROFILE}/testlogs/%d{yyyy-MM-dd_HH}/test%i.log.zip
            </fileNamePattern>
            <maxHistory>7</maxHistory>
            <maxFileSize>50KB</maxFileSize>
            <totalSizeCap>200KB</totalSizeCap>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p - %m%n</pattern>
        </encoder>

    </appender>

    <root level="INFO">
        <appender-ref ref="file" />
    </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这是logback中的错误还是我没有正确配置滚动文件appender?

Aly*_*ali 11

它是Logback 1.1.7中的错误.请参阅:http: //jira.qos.ch/browse/LOGBACK-1166

我已经检查过,totalSizeCap在Logback 1.1.8-SNAPSHOT中工作.


Gui*_*789 6

好吧,即使问题得到了回答,我也想发布我们所做的工作,直到该错误在 1.1.8 中得到修复。

漏洞1166根本不适用totalSizeCap前两个时间单位,取决于最小单位上正在使用的方式为您的方案不会考虑的前两个小时,总计TOTALSIZE封盖日志的fileNamePattern。

我的配置有点像从 logback 站点示例中获取的那样-;

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <!-- daily rollover -->
  <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

  <!-- keep 30 days' worth of history capped at 3GB total size -->
  <maxHistory>30</maxHistory>
  <totalSizeCap>3GB</totalSizeCap>

</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)

所以我们简单地从{yyyy-MM-dd}切换到{yyyy-MM-dd_HH}并且当然将 maxHistory 最大化到30*24。因此,我们将最后两个小时设为没有上限,而不是最后两天,对于我们的案例,它是可省略的。当然,日志文件每隔一小时就会开始翻转,但正如我所说,这对于我们的独特情况来说是可以的。