Log4j2性能对比 Log4j1.x,logback

Log4j2作为Apache的新一代日志框架,相较于logback和log4j1.x在性能上有显著提升,特别是在异步日志处理方面。其利用LMAX Disruptor技术实现高并发低延迟,且从2.6版本开始默认以零GC模式运行,减少内存开销。此外,Log4j2支持“惰性”打日志,提高代码执行效率。
摘要由CSDN通过智能技术生成

历史说明

log4j 1.0和logback都算是Java 里比较老牌的日志框架,logback从06年开始第一个版本,迭代至今也十几年了、最近一个稳定版本还停留在 2017 年,好几年都没有更新,ogback的兄弟 slf4j 最近一个稳定版也是2017年,而且 logback的异步性能实在不高,功能简陋,配置又繁琐,远不及Apache 的新一代日志框架 - log4j2。

Log4j2简介

Apache Log4j 2是 Log4j(1) 的升级版,比它的祖先 Log4j 1. x 有了很大的改进,和logback对比有很大的改进。除了内部设计的调整外,主要有以下几点的大升级:

  • 更简化的配置
  • 更强大的参数格式化
  • 最夸张的异步性能

Log4j 2中,分为API(log4j-api)和实现(log4j-core) 两个模块。API 和slf4j 是一个类型,属于日志抽象/门面。core为实现。

对比

log4j2 在目前Java中的日志框架里,经官方评测,异步日志的性能是最高的。

先来看一下,几种日志框架benchmark对比结果(log4j2官方测试结果):
在这里插入图片描述
从图上可以看出,log4j2的异步(全异步,非混合模式)下的性能,远超log4j1和logback,简直吊打。压力越大的情况下,吞吐上的差距就越大。在64线程测试下,log4j2的吞吐达到了180w+/s,而logback/log4j1只有不到20w,相差近十倍。

高性能

高并发和低性能:

这个主要是针对Log4j的异步日志记录来说的。虽然由于Log4j 2.x 由于充分利用Java 5的并发特性(主要是使用了一些concurrent包下锁),使得性能得到一定的改善,但是Log4j 2.x中的异步日志器(Asynchronous Loggers)的高并发和低延迟才是log4j 2框架的亮点。
在Log4j 1.x 中,使用AsyncAppender类来异步收集日志。它的底层实现是使用了普通的ArrayList,没有采用基于管程的BlockingQueue,并结合条件队列操作wait, notifty来实现阻塞队列。默认容量是128个LoggingEvent。由于内部使用了大量的锁(synchronized),在高并发的情况下影响了系统的异步性能。
而Lockback内部采用的是ArrayBlockingQueue,相比Log4 1.x来说,性能有了很大的提高。

在Log4j 2.x中,Asynchronous Loggers是Log4j2新增的日志器,异步日志器在其内部实现采用了LMAX Disruptor(一个无锁的线程间通信库)技术,Disruptor主要通过环形数组结构、元素位置定位和精巧的无锁设计(CAS)实现了在高并发情形下的高性能。而且Log4j 2.x中Asynchronous Appenders作为Asynchronous Loggers工作的一部分,效果进行了增强。每次写入磁盘时,都会进行flush操作,效果和配置“immediateFlush=true”一样。该异

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值