点击上方 好好学java ,选择 星标 公众号

重磅资讯、干货,第一时间送达今日推荐:Nginx 为什么快到根本停不下来?个人原创100W+访问量博客:点击前往,查看更多

来源:https://juejin.im/post/6844903926777511943

有很多网友发表了自己的意见:

意见1

意见2

意见三

总结一下就是:

  • logback性能测试同步和异步TPS相差不大

  • 都9102年了还在用logback

看到网友的意见后又继续去做了一波测试和调研

服务器硬件

  • CPU 六核

  • 内存 8G

测试工具

  • JMeter

  • JProfile

  • APM(New Relic)

logback日志框架同步和异步测试

之前的测试结果存在以下几点问题:

  • 测试样本数过少(即线程数和循环执行次数过少,之前线程数为100,循环1次,样本总数为100)

  • 测试次数过少,只进行了一次测试,结果存在偶然性

  • 两次测试结果存在污染,样本数量不一样

针对以上问题,重新测试中将线程数修改为200,每次测试中循环100次,样本总数为2w,和原来测试的样本数相比扩大200倍,并且重复测试5次。新的测试结果如下:

logback同步和异步测试性能报告

新的测试结果表明,使用logback日志框架同步和异步输出日志方式的TPS相差不大。把数据制作成柱形图更直观

logback同步和异步测试结果

但是总觉得异步去写日志了,访问api的线程将更快响应客户端,TPS就应该有明显的变化才对。想不通又去网上查阅了一些资料,有反应说通过APM进行性能监控,同步和异步的TPS将会有较大的差别,TPS一定是会有明显变化的(呐喊),于是用APM去监控JMeter发送的请求(JMeter参数设置为线程数100,Ramp-up Period为0,循环100次):APM测试结果如下:

APM-异步输出日志

APM监控下,在执行的五分钟内异步输出日志TPS平均为378rpm

APM-同步输出日志

APM监控下,在执行的五分钟内同步输出日志TPS平均为333rpm 发现TPS同步和异步相比还是不明显

又一次证明失败 虽然想不明白但后来和网友探讨了下,醍醐灌顶

我好菜啊

TPS变化不明显的原因如下:TPS为每秒处理事务数,每个事务包括了如下3个过程:

  • 用户请求服务器

  • 服务器自己的内部处理

  • 服务器返回给用户

服务器自己的内部请求包括访问数据库、处理逻辑和打印日志,同步和异步中唯一不同的就是打印日志的方式。而从测试结果来看,打印日志耗时只占API访问请求的5.3%,所以缩短打印日志耗时不能很明显的提高TPS,因为打印时间和网络请求、业务处理消耗时间可以忽略不计 但是测试结果表明,虽然使用异步输出方式不能明显提高TPS,但是能够减少打印日志的耗时。所以使用logback日志框架还是推荐使用异步输出方式

推荐使用log4j2而不是logback

log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,带来了一些重大的提升,在异步方面的性能得到了巨大提升,其除了提供Async Append异步实现外还提供了Async Log异步实现,其中Async Append异步实现方式和logback的异步实现差不多,而Async Log基于LMAX Disruptor库,实现了一个高性能的异步记录器。本次测试中log4j2异步实现是基于Async Log。JMeter测试参数和之前的logback测试一样,线程数200,循环次数100,重复五轮。并且logj2日志配置文件基本和logback异步配置相同,满足:

  • 控制台打印日志

  • 分类输出日志

  • 按天滚动

  • 同样的日志输出格式

测试结果如下:

logback和log4j2异步测试性能报告

将TPS制作为柱形图

logback和log4j2异步测试结果

TPS提升了6倍!!!,并且打印日志的耗时都快到统计不出来了 官方提供的测试报告中,log4j2和logback相比性能提升更明显。附官方测试报告:Asynchronous Loggers for Low-Latency Logging(https://logging.apache.org/log4j/log4j-2.3/manual/async.html)

最后,再附上我历时三个月总结的 Java 面试 + Java 后端技术学习指南,笔者这几年及春招的总结,github 1.4k star,拿去不谢!


下载方式1. 首先扫描下方二维码
2. 后台回复「Java面试」即可获取

日志框架,选择Logback Or Log4j2?相关推荐

  1. 日志框架之Logback的使用与详细配置

    日志框架之Logback的使用与详细配置 Logback概述 配置文件结构 日志级别 Logback的基本使用 与Maven项目集成 与Spring Boot集成 logback配置 Logger配置 ...

  2. Java各类日志门面(slf4j,commons-logging)和日志框架(log4j,logback)联系和区别

    日志门面 1.Apache通用日志接口(commons-logging.jar) Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logg ...

  3. 【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 分析 Spring MVC提供了一个DispatcherServlet来开发Web应 ...

  4. Java项目如何统一日志框架?

    在程序运行的过程中,我们需要在重要的代码逻辑分支点,将关键的程序运行状态信息打印出来,便于我们对程序调试和观察.java项目中有成熟高性能的日志框架,很方便地集成到项目中实现我们对关键信息的打印输出. ...

  5. Java基础学习总结(155)——Java 日志框架怎么选?Logback Or Log4j2?

    前言 前段时间写了一篇文章(文章链接:Logback配置文件这么写,TPS提高10倍),反响还不错,有很多网友也发表了自己的意见: 总结一下就是: logback性能测试同步和异步TPS相差不大 都9 ...

  6. java常用日志框架日志门面及实现 SLF4J 、Jboss-logging 、JCL、Log4j、Logback、Log4j2、JUL,springboot集成 log4j、log4j2

    java常用日志框架日志门面SLF4J .Jboss-logging .JCL.Log4j及实现 Logback.Log4j2.JUL,springboot集成 log4j.log4j2 .logba ...

  7. java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽

    为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统 ...

  8. Spring Boot + Log4j2 日志框架配置 (Maven)

    参考Spring Boot官方文档 日志部分 Spring Boot默认情况下,当使用"Starters" 使用Logback输出日志 , 还包括适当的Logback路由, 确保其 ...

  9. 日志门面和日志框架(日志实现框架log4j2)

    一.log4j2简介 Apache Log4j 2是对Log4j的升级,是最优秀的java日志框架. 二.log4j2特征 性能提升:Log4j2包含基于LMAX Disruptor库的下一代异步记录 ...

最新文章

  1. Visual Studio跨平台开发Xamarin
  2. C#String地址、拼接性能学习
  3. 这个椅子哪里卖?我也想买啊!
  4. SpringBoot中使用Thymeleaf常用功能(二):测试Thymeleaf条件判断
  5. BUUCTF-Reverse:reverse3
  6. 驱动级模拟驱动级模拟:直接读写键盘的硬件端口!
  7. hdu1006 Tick and TIck
  8. js验证input输入框(字母,数字,符号,中文)
  9. 这些器件是电子垃圾?是艺术作品!!!
  10. 一二三系列之CodeChef分块——Chef and Churu,Chef and Problems,Children Trips
  11. zk框架_ZK Web框架思想
  12. Chilkat -- python又一个强大的库
  13. WebGL难以置信的神奇效果
  14. Java HashMap原理
  15. oracle中t,Oracle中如何用T
  16. c语言n的阶乘 longfact,如何定义函式fact(n) 计算n的阶乘:n!=1*2*……*n,函式返回值型别是double?...
  17. 浅谈音乐与计算机,浅析电脑音乐在音乐教育中的应用
  18. Rest-Assured实战 REST API之使用 Rest-Assured验证报文内容
  19. Fortran之format输出
  20. 阿里云视频点播播放出错,控制台访问出现code:4400

热门文章

  1. AS3 CookBook学习整理(十七)
  2. __stdcall详解
  3. stm32 USART接收总线空闲中断--USART_IT_IDLE
  4. STM32 容易烧成电源短路解决方法
  5. ESP8266编译脚本之三
  6. 数据挖掘 —— 有监督学习(分类)
  7. php 修改文件的权限_php怎么修改文件的权限?
  8. C++ Primer 5th笔记(chap 16 模板和泛型编程)可变参数模板
  9. 区块链BaaS云服务(25)边界智能 IRITA平台
  10. 《研磨设计模式》chap25 访问者模式Visitor(3)联合组合模式+总结