Logback:SizeAndTimeBasedRollingPolicy将totalSizeCap应用于maxHistory中的每一天

时间:2017-12-11 12:26:25

标签: logging logback logback-classic

Logback version 1.2.3

我想在我们的logback配置文件(logback.xml)中使用SizeAndTimeBasedRollingPolicy,但此时SizeAndTimeBasedRollingPolicy并没有按预期运行。 (https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy

理想情况下,我希望不久之前保留日志。 90天,每个文件不超过100MB,总存档大小为ex。总共10GB。

目前的情况是,totalSizeCap应用于MaxHistory范围内的每个条目。 实施例

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
       <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
       <maxFileSize>100MB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>

上述XML配置将创建超过60天的日志,每天应用1GB的totalSizeCap。这将导致总存档大小为60GB而不是预期的1GB。如果在白天达到totalSizeCap,则日期的日志将通过删除当天最早的文件开始翻转,这将在日志历史记录中创建我们不想要的空白。解决此错误的方法是使用年度翻转,而不是每日或每月翻转,不幸的是,使用SizeAndTimeBasedRollingPolicy时,年度翻转不起作用。

有没有人知道这个问题,这是修复过的,还是我在配置中做错了什么?

1 个答案:

答案 0 :(得分:1)

好像你发现了一个错误!

日志中应该没有间隙。达到totalSizeCap时,应删除最旧的日志文件。达到maxHistory时,应删除最旧的日志文件。

不幸的是,似乎logback中存在一个错误,导致日志记录中出现空白,因为不会删除最旧的文件。请参见此处的演示:https://github.com/riskop/slf4j_logback_SizeAndTimeBasedRollingPolicy_problem

我已经打开了一个问题:https://jira.qos.ch/browse/LOGBACK-1361

根据Gülcü的说法,它将在logback classic 1.3.0中修复。

请注意,您可以在logback的Jira上“投票”这个问题!