• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

springboot 中使用异步日志

互联网 diligentman 2个月前 (03-02) 14次浏览

同步日志

springboot 中使用异步日志

身上涂可以看出 logger 经过过滤对应的日志级别的日志后,判断是在哪输出,然后以某种布局形式输出。

同步打印日志,日志输出与业务逻辑在同一线程内,当日志输出完毕,才能进行后续业务逻辑操作

Log4j2中的异步日志

springboot 中使用异步日志

而使用异步日志进行输出时,日志输出语句与业务逻辑语句并不是在同一个线程中运行,而是有专门的线程用于进行日志输出操作,处理业务逻辑的主线程不用等待即可执行后续业务逻辑。

Log4j2中的异步日志实现方式有AsyncAppender和AsyncLogger两种

AsyncAppender采用了ArrayBlockingQueue来保存需要异步输出的日志事件;AsyncLogger则使用了Disruptor框架来实现高吞吐。

Async Appender 异步打印日志,内部采用ArrayBlockingQueue,对每个AsyncAppender创建一个线程用于处理日志输出。
Async Logger 异步打印日志,采用了高性能并发框架Disruptor,创建一个线程用于处理日志输出。

ArrayBlockingQueue使用锁实现并发控制,当get或put时,当前访问线程将上锁,当多生产者、多消费者的大量并发情形下,由于锁竞争、线程切换等,会有性能损失。

Disruptor通过CAS实现多生产者、多消费者对RingBuffer的并发访问。CAS相当于乐观锁,其性能优于Lock的性能。

 

注:1. 如果使用异步日志,AsyncAppender、AsyncLogger和全局日志,不要同时出现。性能会和AsyncAppender一致,降至最低。2. 设置includeLocation=false ,打印位置信息会急剧降低异步日志的性能,比同步日志还要慢。

lock 没有cas 自旋效率高

springboot 中使用异步日志

这个用的锁,虽然比synchronized 快了点,不过cas 是自旋效率更多

springboot 中使用异步日志

 

展开阅读全文

casdisruptorspring bootlog4j

© 著作权归作者所有

举报

打赏

0


0 收藏

微信
QQ
微博

分享

作者的其它热门文章

Java数据结构和算法(六)——前缀、中缀、后缀表达式
mysql主从复制原理
miniui的单选框
Mybatis中的jdbcType的作用


程序员灯塔
转载请注明原文链接:springboot 中使用异步日志
喜欢 (0)