Appender的几种实现方式

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接口还继承了LifeCycleContextAwareFilterAttachable接口,它们的作用如下:

  • 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

作用:控制台日志打印

可配置属性:

属性名类型作用
namejava.lang.String唯一名称
filterch.qos.logback.core.filter.Filter过滤器,用于控制日志是否输出
encoderch.qos.logback.core.encoder.Encoder编码器,用于控制日志输出格式
layoutch.qos.logback.core.Layout日志排版格式,官方已不建议使用,使用encoder内部layout属性代替
immediateFlushboolean输出流打印日志是否立即刷新,默认true
targetjava.lang.String输入目标,仅支持System.outSystem.err, 默认值System.out
withJansiboolean在Windows系统上是否支持以jansi输出,一个可以让控制台色彩缤纷的日志库,默认false

常见编码器:

  • LayoutWrappingEncoder:日志排版格式包装编码器,需要指定layout属性,同时提供charset属性指定;
  • PatternLayoutEncoder:LayoutWrappingEncoder的子类,默认采用PatternLayout,可仅需指定日志格式的pattern属性即可,若强行指定layout将抛出异常;

4. FileAppender

类名:ch.qos.logback.core.FileAppender

作用:文件日志打印

可配置属性:

属性名类型作用
namejava.lang.String唯一名称
filterch.qos.logback.core.filter.Filter过滤器,用于控制日志是否输出
encoderch.qos.logback.core.encoder.Encoder编码器,用于控制日志输出格式
layoutch.qos.logback.core.Layout日志排版格式,官方已不建议使用,使用encoder内部layout属性代替
immediateFlushboolean输出流打印日志是否立即刷新,默认true
filejava.lang.String输出文件
prudentboolean当该属性设置为true时,表示来自多个jvm的日志可以安全地写入同一个文件中,同时append属性会被强制设置为true
appendboolean是否在配置的输出文件进行追加
bufferSizech.qos.logback.core.util.FileSize输出缓冲大小

5. RollingFileAppender

类名:ch.qos.logback.core.rolling.RollingFileAppender

作用:滚动文件日志打印,可根据一定规则进行切割打印

可配置属性:

属性名类型作用
namejava.lang.String唯一名称
filterch.qos.logback.core.filter.Filter过滤器,用于控制日志是否输出
encoderch.qos.logback.core.encoder.Encoder编码器,用于控制日志输出格式
layoutch.qos.logback.core.Layout日志排版格式,官方已不建议使用,使用encoder内部layout属性代替
immediateFlushboolean输出流打印日志是否立即刷新,默认true
filejava.lang.String输出文件, 当设置了触发策略或者滚动策略后就无需再设置该属性
prudentboolean当该属性设置为true时,表示来自多个jvm的日志可以安全地写入同一个文件中,同时append属性会被强制设置为true
appendboolean在RollingFileAppender中,该属性强制为true
bufferSizech.qos.logback.core.util.FileSize输出缓冲大小
triggeringPolicych.qos.logback.core.rolling.TriggeringPolicy触发策略,因某些策略同时实现了TriggeringPolicy和RollingPolicy接口,所以无需重复配置
rollingPolicych.qos.logback.core.rolling.RollingPolicy滚动策略,因某些策略同时实现了TriggeringPolicy和RollingPolicy接口,所以无需重复配置

常见配置策略:

  • TimeBasedRollingPolicy:基于日期的滚动策略,可配置属性如下:

    属性名类型作用
    fileNamePatternjava.lang.String日志文件名称模板
    maxHistoryint历史日志文件最大保存时间(天)
    totalSizeCapch.qos.logback.core.util.FileSize所有日志文件最大保存大小
    timeBasedFileNamingAndTriggeringPolicy太长,请查看源码无需配置,因为其中一个实现方式被废弃,而另一个实现方式就是它的默认方式
  • SizeAndTimeBasedRollingPolicy:基于大小和日期的滚动策略,可配置属性如下:

    属性名类型作用
    fileNamePatternjava.lang.String日志文件名称模板
    maxHistoryint历史日志文件最大保存时间(天)
    totalSizeCapch.qos.logback.core.util.FileSize所有日志文件最大保存大小
    maxFileSizech.qos.logback.core.util.FileSize单个日志文件最大保存大小

6. AsyncAppender

类名:ch.qos.logback.classic.AsyncAppender

作用:异步打印日志;注意:AsyncAppender会在阈值触发时将TRACE、DEBUG、INFO级别的日志进行丢弃

可配置属性:

属性名类型作用
namejava.lang.String唯一名称
filterch.qos.logback.core.filter.Filter过滤器,用于控制日志是否输出
appender-ref如:Appender引用
appenderch.qos.logback.core.Appender异步执行的Appender,建议使用appender-ref代替
queueSizeint阻塞队列大小
discardingThresholdint丢弃阈值,若阻塞队列剩余容量小于该阈值时进行丢弃判断,默认值为阻塞队列大小1/5
maxFlushTimeintAppender停止时允许异步线程延迟销毁时间(毫秒)
neverBlockboolean是否从不阻塞
includeCallerDataboolean是否包含调用者数据

7. SiftingAppender

类名:ch.qos.logback.classic.sift.SiftingAppender

作用:根据指定的变量使用对应的Appender, 可以实现特定日志写入特定文件中

可配置属性:

  1. discriminator

    <discriminator>
        <!-- 指定的变量名 -->
        <key>thread</key>
        <!-- 默认值 -->
        <defaultValue>unknown</defaultValue>
    </discriminator>
    
  2. 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>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieGGu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值