如何配置Logback以每小时旋转文件n天。

时间:2017-01-04 09:59:15

标签: java logging logback

我想每小时轮换一次日志文件,并在更换前保留n天。让我们说例如2天,这意味着如果不满足totalSizeCap,我应该看到48个日志文件。

<appender name="missing_fields" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/missing_fields.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <fileNamePattern>logs/missing_fields_%d{yyyyMMdd-HH}.log</fileNamePattern>
    <maxHistory>**48**</maxHistory>
    <totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
   <pattern>%date#%level#%logger#thread#%message%n%xException</pattern>
</encoder>

我得到的是日志文件每小时轮换一次,但仅持续24小时。因此,在此之后,logback开始替换文件而不是将它们保留48小时。

E.g。我希望看到: missing_field_20170104-10.log 一天之后 missing_field_20170105-10.log,

虽然它只保留24小时的日志文件。

2 个答案:

答案 0 :(得分:0)

根据documentation,您应该将配置更改为

<maxHistory>48</maxHistory>

答案 1 :(得分:0)

official documentation 中,您会发现以下示例:

<configuration>
<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>20GB</totalSizeCap>
</rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
</appender>


   <root level="DEBUG">
        <appender-ref ref="ROLLING" />
   </root>

</configuration>

注意除“%d”之外的“%i”转换标记。 %i 和 %d 标记都是必需的。