Logback 对比 Log4j2
测试分为本地测试端和服务器端,分别对gateway网关进行日志输出的压测
同步日志,不打印日志
logback(150并发,0间隔,循环50次)
log4j2(150并发,0间隔,循环50次)
同步日志,打印日志(大小4k,循环输出100次)
logback(150并发,0间隔,循环50次)
log4j2(150并发,0间隔,循环50次)
异步打印日志(大小4k,循环输出100次,仅输出文件)
logback(150并发,0间隔,循环50次)
log4j2(150并发,0间隔,循环50次)
测试环境
logback(50并发,0间隔,循环20次)
不打印日志
打印日志
log4j2(50并发,0间隔,循环20次)
不打印日志
打印日志
打印日志每条30k输出1000次(一次请求30M)
log4j2(50并发,0间隔,循环20次)
logback(50并发,0间隔,循环20次)
测试结果
对比响应时间
本地测试log4j2完爆logback(网关给的是2G堆内存)但是还是以测试环境为准:
- 在不输出日志和仅输出400k日志的情况下log4j2的99%,95%相比logback的耗时都有所减少;
- 同样开启异步日志的情况下输出30m日志的99%与95%差距在10倍以上.
对比jvm
对比30M日志输出时的JVM情况:
- logback进行了大量的YCG去清理临时的临时变量,而log4j2的变化相对稳定;
- logback的在异步处理的时候使用的是阻塞队列,日志输出量大导致写盘时间长队列堆积大使得处理日志时间过长;
- 对比线程变化logback线程相对变化大于log4j2.
总结
- 在线上环境关闭控制台输出会对性能有所提升;
- 相同情况下对比,log4j2性能更优;
- 在对日志输出场景比较多的情况下可以考虑将logback更换为log4j2;