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

时间:2024-10-27 04:11:08

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 进行各种测试已找到最优值。不合理的队列长度或者丢弃策略会导致业务线程阻塞在日志队列上,从而让异步日志成为系统性能瓶颈!

© 手抄报圈