Logback RollingFileAppender 教程

2,017 阅读3分钟

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-corelogback-classicslf4j-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-coreslf4j-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配置文件样本,供参考。

祝你学习愉快!!

下载源代码