一、Appender的作用
用于将日志内容写入到控制台、文件、网络等实体。
二、Appender与RollingPolicy
2.1 Appender的分类
序号 | 名称 | 功能描述 | 选项 |
---|---|---|---|
1 | ConsoleAppender | 把日志写到是System.out(默认)或 System.err | 1. encoder 2.target: 字 符 串 “ System.out ”( 默 认) 或 “ System.err ” |
2 | FileAppender | 把日志写入到文件,有参数可控制是追加写入或清空后写入 | 1.encoder 2.append: 如果 true,事件被追加到现存文件尾部。如果 false,清空现存文件。默认为 true。 3.prudent 设置prudent模式,用于多JVM使用同一个日志文件时,安全的将日志写入文件,但此方式降低3倍写入效率 4.file 设置文件名,可使用宏(Properties)区分文件名 |
3 | RollingFileAppender | 滚动日志文件,有两个属性决定“如何滚动RollingPolicy”、“何时滚动TriggeringPolicy”。必须同时设置 RollingPolicy 和 TriggeringPolicy;如果 RollingPolicy 同时实现了 TriggeringPolicy 接口,那么只需要设置 RollingPolicy | 1.encoder 2.append: 如果 true,事件被追加到现存文件尾部。如果 false,清空现存文件。默认为 true。 3.prudent 设置prudent模式,用于多JVM使用同一个日志文件时,安全的将日志写入文件,但此方式降低3倍写入效率 4.file 设置文件名,可使用宏(Properties)区分文件名; 5.rollingPolicy 发生滚动时,决定 RollingFileAppender 的行为 6.triggeringPolicy 告知 RollingFileAppender 何时激活滚动 |
2.2 RollingPolicy的分类
序号 | 名称 | 功能描述 | 选项 |
---|---|---|---|
1 | FixedWindowRollingPolicy | 固定滚动文件数量 | 1.minIndex 窗口索引的最小值 2.maxIndex 窗口索引的最大值 3.fileNamePattern 对于最小值和最大值分别是 1 和 3 的文件名模式“MyLogFile%i.log”,会产生归档文件 MyLogFile1.log、MyLogFile2.log 和 MyLogFile3.log。该 属 性 还 可 以 指 定 文 件 压 缩 选 项 。 例 如“MyLogFile%i.log.zip”表示归档文件必须用 zip 格式进行压缩;还支持“.gz”格式 |
2 | TimeBasedRollingPolicy | 根据时间设置滚动方式 | 1.fileNamePattern 必需。定义滚动(归档)记录文件的名字。其值应当包含文件名及“%d”格式转换符。“%d”可以包含一个java.text.SimpleDateFormat 指定的日期时间模式。如果没有指定日期时间模式,则默认为 yyyy-MM-dd。RollingFileAppender(TimeBasedRollingPolicy 之父)的“file”选项可有可无。通过设置“file”属性,可以为活动文件和归档文件指定不同的位置。当前记录总是被指向由“file”属性指定的文件。如果有“file”属性,则活动文件的名字不会改变。而如果没有“file”属性,则活动文件的名字会根据“fileNamePattern”的值每隔一段时间就重新计算一次。下面的例子会解释这点。“ %d{} ” 里 的 日 期 时 间 模 式 遵 循java.text.SimpleDateFormat 的约定。在 FileNamePattern或日期时间模式里的前置“/”或后置“\”会被当作目录分隔符。 2.maxHistory 控制被保留的归档文件的最大数量,超出数量就删除旧文件。例如,假设每月滚动,且 maxHistory 是 6,则只保留最近 6 个月的归档文件,删除之前的文件。注意当删除旧归档文件时,那些为了归档而创建的目录也会被删除。 |
3 | SizeAndTimeBasedRollingPolicy | 根据时间和大小设置滚动方式 | 1.maxFileSize 2.maxHistory 3.totalSizeCap |
2.3 TimeBasedRollingPolicy中fileNamePattern 常用范式
2.3.1fileNamePattern 常用范式-每天滚动
/path/filenameprefix.%d
因为%d没有指定日期时间格式,所以使用默认的yyyy-MM-dd,即每天滚动。
2.3.2 fileNamePattern 常用范式-每月初滚动
/path/%d{yyyy/MM}/filenameprefix.txt
2.3.3 fileNamePattern 常用范式-每周初滚动
/path/%d/filenameprefix.%d{yyyy-ww}.log
2.3.4 fileNamePattern 常用范式-每小时滚动
/path/filenameprefix.%d{yyyy-MM-dd_HH}.log
2.3.5 fileNamePattern 常用范式-每分钟滚动
/path/filenameprefix.%d{yyyy-MM-dd_HH-mm}.log
三、示例
3.1、ConsoleAppender
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3.2、FileAppender
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<timestamp key="file-date" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log-${file-date}.txt</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</configuration>
3.3、RollingFileAppender+FixedWindowRollingPolicy
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appender name="RollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>rollingFileAppender.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>rollingFileAppender.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>5</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>50MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="RollingFileAppender"/>
</root>
</configuration>
3.4、RollingFileAppender+TimeBasedRollingPolicy
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>RollingFileAppender.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</configuration>
3.5、RollingFileAppender+SizeAndTimeBasedRollingPolicy
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>RollingFileAppender.log</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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE"/>
</root>
</configuration>