Logback 的 rollingPolicy
是用于定义日志文件如何滚动(rollover)的策略。Logback 提供了几种不同的滚动策略,下面详细介绍其中最常用的几种:
- TimeBasedRollingPolicy
这种策略主要基于时间来执行日志的滚动。你可以通过设置诸如
fileNamePattern
属性来指定何时以及如何进行日志滚动(例如,每天、每周或每月)。它非常适合于希望根据时间周期来管理日志文件的情况。然而,它不考虑日志文件的大小,这意味着如果在设定的时间周期内生成了非常大的日志文件,你可能需要等到下一个周期开始才会得到一个新的日志文件。例如:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- daily rollover --><fileNamePattern>logs/myapp-%d{yyyy-MM-dd}.log</fileNamePattern><!-- keep 30 days' worth of history --><maxHistory>30</maxHistory>
</rollingPolicy>
上述配置会每天创建一个新的日志文件,并且只保留最近30天的日志。
如果日志量特别大的话,也可以每一小时进行日志滚动切割
<fileNamePattern>logs/myapp-%d{yyyy-MM-dd_HH}.log</fileNamePattern>
最终日志打印结果如下:
myapp-yyyy-MM-dd.log
myapp-yyyy-MM-dd.log
myapp-yyyy-MM-dd.log
- SizeAndTimeBasedRollingPolicy
这是
TimeBasedRollingPolicy
的一个扩展版本,除了支持基于时间的滚动之外,还增加了对日志文件大小的支持。这意味着,即使在一个时间周期内,如果日志文件达到了指定的大小限制,也会触发滚动创建新的日志文件。这使得它特别适合那些不仅需要按照时间分割日志文件,还需要控制单个日志文件大小的应用场景。
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- rollover daily --><fileNamePattern>logs/myapp-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
在这个例子中,当日志文件达到10MB时或是在新的一天开始时,都会触发日志滚动。同时设置了总共保留的日志不超过1GB。
最终日志文件打印结果如下:
myapp-yyyy-MM-dd.1.log
myapp-yyyy-MM-dd.2.log
myapp-yyyy-MM-dd.3.log
- FixedWindowRollingPolicy
固定窗口滚动策略不是基于时间而是基于日志文件的数量进行滚动。每当需要滚动日志文件时,它会将当前日志文件重命名为一个备份文件名,并开启一个新的日志文件。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>logs/myapp.%i.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
在这个配置中,当日志文件达到5MB时,将会触发滚动,并按照.1.log.zip
, .2.log.zip
这样的模式重命名旧的日志文件,最多保存3个归档文件。
这些滚动策略可以与各种触发策略(如基于大小的触发策略)结合使用,以满足不同的需求。选择合适的滚动和触发策略对于有效管理日志文件至关重要。