Log学习--Logback异步日志的使用和原理分析

2025-11-05 22:30:27

1、Logback 在配置文件中通过 <appender> 进行日志输出的相关配置(相关内容可以参考如下经验),与异步日志相关的是 AsyncAppender , 其配置如下:

<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">

<!-- 不丢失日志.默认的,如果队列内容已达80%,则会丢弃TRACT、DEBUG、INFO级别的日志,配置discardingThreshold为0,则不进行丢弃 -->

<discardingThreshold >0</discardingThreshold>

<!-- 更改默认的队列长度,该值会影响性能,默认值为256 -->

<queueSize>512</queueSize>

<!-- 添加附加的appender,最多只能添加一个 -->

<appender-ref ref ="FILE"/>

</appender>

这里重点解释一下配置中 <appender-ref> 的作用,我们的业务线程调用异步日志输出机制输出日志时,其只是将日志事件添加到日志队列中(不进行IO操作),会有另一个后台日志处理线程作为消费者从该队列中读取日志事件,并调用 <appender-ref> 指定的日志输出类进行具体地日志输出。

Log学习--Logback异步日志的使用和原理分析

2、日志的异步输出类配置完毕后,我们还需配置一个日志记录类来使用这个日志输出类:

    <logger name="cn.prinxcs" additivity="false">  

 

        <level value="TRACE" />  

        <!--配置使用异步日志输出类-->

        <appender-ref ref="ASYNC" />

 

    </logger>

Log学习--Logback异步日志的使用和原理分析

3、测试使用,注意: 对于异步日志输出,在配置日志输出样式的时候,部分 logback 内置输出样式参数无法使用,比如代表日志输出方法的 M% 代表日志输出类的 C% 代表日志输出行的 L% ,强行配置使用这些样式,会导致日志输出异常!

注意:在普通的日志输出配置上,同样不赞成上述这些日志输出参数的使用,因为这些参数会导致对方法调用栈的访问,高并发下会严重影响系统性能!

Log学习--Logback异步日志的使用和原理分析

4、异步日志的使用总结,在特定业务场景下,如果因为日志记录的IO操作影响到了系统性能,可以考虑使用异步日志机制,但需要对相关参数比如日志事件队列的长度 queueSize 以及日志丢弃阈值 discardingThreshold 进行各种测试已找到最优值。不合理的队列长度或者丢弃策略会导致业务线程阻塞在日志队列上,从而让异步日志成为系统性能瓶颈!

 

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢