文章目录
1. Appender接口
public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachable<E> {
/**
* Get the name of this appender. The name uniquely identifies the appender.
* 获取Appender名称,该名称是Appender的唯一标识
*/
String getName();
/**
* This is where an appender accomplishes its work. Note that the argument
* is of type Object.
* 执行Appender的工作, 实际就是对日志进行输出
*
* @param event
*/
void doAppend(E event) throws LogbackException;
/**
* Set the name of this appender. The name is used by other components to
* identify this appender.
* 设置Appender名称,该名称将用于其他组件来识别该Appender
*
*/
void setName(String name);
}
同时,Appender接口还继承了LifeCycle
、ContextAware
、FilterAttachable
接口,它们的作用如下:
- LifeCycle:用于控制组件的生命周期
- ContextAware:用于感知上下文实例,同时记录日志系统的状态信息
- FilterAttachable:用于过滤器的添加、清空、获取、过滤结果的判决等操作
2. Configuration根标签
示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds" packagingData="true">
</configuration>
属性说明:
- debug:是否开启LoggerContext加载信息日志打印,默认false;
- scan:是否开启Logback配置文件修改的周期性监听,默认false,当设置为true时必须设置有效的scanPeriod才能正常执行;
- scanPeriod:监听周期,如:
60 seconds
表示每60秒检测一下; - packagingData:设置LoggerContext的
packagingDataEnabled
属性,用于控制打印异常堆栈时是否计算所在jar包以及它的版本,需要将jar包的package名添加到LoggerContext的frameworkPackages属性中,但计算开销比较大,所以默认false;
3. ConsoleAppender
类名:ch.qos.logback.core.ConsoleAppender
作用:控制台日志打印
可配置属性:
属性名 | 类型 | 作用 |
---|---|---|
name | java.lang.String | 唯一名称 |
filter | ch.qos.logback.core.filter.Filter | 过滤器,用于控制日志是否输出 |
encoder | ch.qos.logback.core.encoder.Encoder | 编码器,用于控制日志输出格式 |
layout | ch.qos.logback.core.Layout | 日志排版格式,官方已不建议使用,使用encoder内部layout属性代替 |
immediateFlush | boolean | 输出流打印日志是否立即刷新,默认true |
target | java.lang.String | 输入目标,仅支持System.out 和System.err , 默认值System.out |
withJansi | boolean | 在Windows系统上是否支持以jansi输出,一个可以让控制台色彩缤纷的日志库,默认false |
常见编码器:
- LayoutWrappingEncoder:日志排版格式包装编码器,需要指定layout属性,同时提供charset属性指定;
- PatternLayoutEncoder:LayoutWrappingEncoder的子类,默认采用PatternLayout,可仅需指定日志格式的pattern属性即可,若强行指定layout将抛出异常;
4. FileAppender
类名:ch.qos.logback.core.FileAppender
作用:文件日志打印
可配置属性:
属性名 | 类型 | 作用 |
---|---|---|
name | java.lang.String | 唯一名称 |
filter | ch.qos.logback.core.filter.Filter | 过滤器,用于控制日志是否输出 |
encoder | ch.qos.logback.core.encoder.Encoder | 编码器,用于控制日志输出格式 |
layout | ch.qos.logback.core.Layout | 日志排版格式,官方已不建议使用,使用encoder内部layout属性代替 |
immediateFlush | boolean | 输出流打印日志是否立即刷新,默认true |
file | java.lang.String | 输出文件 |
prudent | boolean | 当该属性设置为true时,表示来自多个jvm的日志可以安全地写入同一个文件中,同时append属性会被强制设置为true |
append | boolean | 是否在配置的输出文件进行追加 |
bufferSize | ch.qos.logback.core.util.FileSize | 输出缓冲大小 |
5. RollingFileAppender
类名:ch.qos.logback.core.rolling.RollingFileAppender
作用:滚动文件日志打印,可根据一定规则进行切割打印
可配置属性:
属性名 | 类型 | 作用 |
---|---|---|
name | java.lang.String | 唯一名称 |
filter | ch.qos.logback.core.filter.Filter | 过滤器,用于控制日志是否输出 |
encoder | ch.qos.logback.core.encoder.Encoder | 编码器,用于控制日志输出格式 |
layout | ch.qos.logback.core.Layout | 日志排版格式,官方已不建议使用,使用encoder内部layout属性代替 |
immediateFlush | boolean | 输出流打印日志是否立即刷新,默认true |
file | java.lang.String | 输出文件, 当设置了触发策略或者滚动策略后就无需再设置该属性 |
prudent | boolean | 当该属性设置为true时,表示来自多个jvm的日志可以安全地写入同一个文件中,同时append属性会被强制设置为true |
append | boolean | 在RollingFileAppender中,该属性强制为true |
bufferSize | ch.qos.logback.core.util.FileSize | 输出缓冲大小 |
triggeringPolicy | ch.qos.logback.core.rolling.TriggeringPolicy | 触发策略,因某些策略同时实现了TriggeringPolicy和RollingPolicy接口,所以无需重复配置 |
rollingPolicy | ch.qos.logback.core.rolling.RollingPolicy | 滚动策略,因某些策略同时实现了TriggeringPolicy和RollingPolicy接口,所以无需重复配置 |
常见配置策略:
-
TimeBasedRollingPolicy:基于日期的滚动策略,可配置属性如下:
属性名 类型 作用 fileNamePattern java.lang.String 日志文件名称模板 maxHistory int 历史日志文件最大保存时间(天) totalSizeCap ch.qos.logback.core.util.FileSize 所有日志文件最大保存大小 timeBasedFileNamingAndTriggeringPolicy 太长,请查看源码 无需配置,因为其中一个实现方式被废弃,而另一个实现方式就是它的默认方式 -
SizeAndTimeBasedRollingPolicy:基于大小和日期的滚动策略,可配置属性如下:
属性名 类型 作用 fileNamePattern java.lang.String 日志文件名称模板 maxHistory int 历史日志文件最大保存时间(天) totalSizeCap ch.qos.logback.core.util.FileSize 所有日志文件最大保存大小 maxFileSize ch.qos.logback.core.util.FileSize 单个日志文件最大保存大小
6. AsyncAppender
类名:ch.qos.logback.classic.AsyncAppender
作用:异步打印日志;注意:AsyncAppender会在阈值触发时将TRACE、DEBUG、INFO级别的日志进行丢弃
可配置属性:
属性名 | 类型 | 作用 |
---|---|---|
name | java.lang.String | 唯一名称 |
filter | ch.qos.logback.core.filter.Filter | 过滤器,用于控制日志是否输出 |
appender-ref | 如: | Appender引用 |
appender | ch.qos.logback.core.Appender | 异步执行的Appender,建议使用appender-ref 代替 |
queueSize | int | 阻塞队列大小 |
discardingThreshold | int | 丢弃阈值,若阻塞队列剩余容量小于该阈值时进行丢弃判断,默认值为阻塞队列大小1/5 |
maxFlushTime | int | Appender停止时允许异步线程延迟销毁时间(毫秒) |
neverBlock | boolean | 是否从不阻塞 |
includeCallerData | boolean | 是否包含调用者数据 |
7. SiftingAppender
类名:ch.qos.logback.classic.sift.SiftingAppender
作用:根据指定的变量使用对应的Appender, 可以实现特定日志写入特定文件中
可配置属性:
-
discriminator
<discriminator> <!-- 指定的变量名 --> <key>thread</key> <!-- 默认值 --> <defaultValue>unknown</defaultValue> </discriminator>
-
sift
<sift> <!-- 动态创建该Appender --> <appender name="${thread}_file" class="ch.qos.logback.core.FileAppender"> <file>./logs/${thread}-file.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss SSS} [%level] [%thread] %logger{100}:%line - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> </sift>