Logback:SizeAndTimeBasedRollingPolicy不遵守totalSizeCap

时间:2016-05-03 20:57:15

标签: java logging logback

我正在尝试以一种方式管理我的日志记录,在这种方式中,我的最旧的归档日志文件一旦达到总累积大小限制或达到其最大历史记录限制就会被删除。在Logback 1.1.7中使用SizeAndTimeBasedRollingPolicy时,滚动文件追加器将继续创建新的存档,尽管超过了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>

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

2 个答案:

答案 0 :(得分:11)

Logback 1.1.7中的错误。 看到: http://jira.qos.ch/browse/LOGBACK-1166

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

答案 1 :(得分:3)

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

bug 1166根本不会将 totalSizeCap 应用于前两个时间单位,具体取决于您使用的fileNamePattern上的最小单位方案它不会考虑totalSize上限的前两个小时的日志。

我的配置在某种程度上是从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>

所以我们只需从 {yyyy-MM-dd} 切换到 {yyyy-MM-dd_HH} ,当然最大化maxHistory为 30 * 24 即可。因此,我们最后两小时不是上限而是最近两天,对于我们的情况,它是可以省略的。当然,日志文件将在每个小时开始翻转,但正如我所说的那样,我们的独特案例还可以。