Logback RollingFileAppender 将日志事件附加到一个文件中,并能够根据特定的时间表,如每天、每周、每月或基于日志文件的大小,进行滚动*(归档当前的日志文件,并在一个新文件中恢复日志*)。
为了快速参考,这是我们将在文章中进一步讨论的配置文件。它有对控制台应用者和滚动文件应用者的配置。
<configuration>
<property name="LOG_ROOT" value="c:/temp/logs" />
<property name="LOG_FILE_NAME" value="application" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_ROOT}/${LOG_FILE_NAME}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_ROOT}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<!-- each archived file's size will be max 10MB -->
<maxFileSize>10MB</maxFileSize>
<!-- 30 days to keep -->
<maxHistory>30</maxHistory>
<!-- total size of all archive files, if total size > 100GB, it will delete old archived file -->
<totalSizeCap>100GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.howtodoinjava.app" level="INFO" additivity="false">
<appender-ref ref="FILE"/>
</logger>
<root level="ERROR">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
1.1.依赖性
Logback在应用程序运行时需要三个模块,即logback-core、logback-classic和slf4j-api。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
请注意,logback-classic会自动拉入logback-core和slf4j-api,所以添加logback-classic的依赖即可。
2.滚动和触发策略
2.1.基于时间的滚动策略(TimeBasedRollingPolicy
为了配置滚动日志,我们可以使用TimeBasedRollingPolicy ,它具有以下属性。
fileNamePattern:定义了滚动(归档)日志文件的名称。滚动期是由其值中指定的日期模式推断出来的。默认模式为'yyyy-MM-dd'。maxHistory(可选):控制要保留的最大归档文件数量,异步删除旧文件。totalSizeCap(可选):控制所有存档文件的总大小。当超过总大小上限时,最老的档案会被异步删除。cleanHistoryOnStart:默认情况下是假的,这意味着档案移除通常是在滚动期间进行。如果设置为 "true",档案删除将在appender启动时执行。
谨慎模式支持多个JVM写到同一个日志文件。
给定的日志回溯配置每天创建滚动的日志,保留30天的历史,但最多有3GB的总归档日志。一旦突破了大小限制,较旧的日志就开始被删除。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>application.log</file>
<prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
2.2.基于大小和时间的滚动策略
基于大小的滚动策略允许对每个日志文件进行基于文件的滚动。例如,当日志文件的大小达到10MB时,我们可以滚动到一个新的文件。
maxFileSize 是用来指定每个文件被滚动时的大小。
另外,注意到令牌'%i' ,它被用来创建具有递增索引的新文件,从0开始。这需要创建多个具有maxFileSize 限制的小文件,以取代单一的大滚存文件。
给定的logback配置每天创建最大日志大小为10MB的滚动日志,保留30天的历史,但最多有10GB的总存档日志。一旦超过大小限制,较旧的日志就开始被删除。
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>application-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>
2.3.基于大小的触发策略
我们已经在上一节讨论了基于大小的触发策略,使用maxFileSize 。它也是如此,只是在语法上有一点区别,SizeBasedTriggeringPolicy ,在一个单独的章节中声明。
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>application-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
3.结论
在这个logback滚动文件appender教程中,我们通过实例学习了配置基于时间和大小的滚动策略。我们还看到了带有控制台和滚动文件appender的logback配置文件样本,供参考。
祝你学习愉快!!