记录奥运-当今五大Java记录框架之间的竞赛
开发人员:Takipi会告诉您何时新代码在生产中中断–
Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2
日志记录实际上是每个服务器端应用程序中古老而固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些应用程序每天可能仅记录几兆字节,而其他应用程序可能会在数小时内记录千兆字节或更多的数据。
由于日志记录通常涉及IO将数据写入磁盘(阻塞或异步)–因此需要付出一定的代价。 在短时间内记录大量数据时,该成本会Swift增加。 我们决定更深入地研究当今一些领先的日志记录引擎的速度。
大多数开发人员记录数据的原因主要有以下三个:
- 监视 –查看代码在吞吐量,规模,安全性等方面的行为。
- 调试 –访问导致代码失败的状态(变量,堆栈跟踪…)。 Takipi帮助开发人员调试登台服务器和生产服务器,并了解代码崩溃和线程冻结的原因。
- 分析 –利用应用程序中的实时数据得出有关其使用方式的结论。
在立面的后面 。 如今,大多数库都在代码的关键点内置了日志,以提供对其操作的可见性。 为了简化此过程并防止不同的库在同一个JVM中使用多种日志记录方法,将代码与底层引擎分离的日志记录Facade成为最重要的问题。 当我们分析Java的前100个软件库时 ,SLF4J成为当今开发人员使用的主要日志记录外观。
比赛
我们决定选择五个当今最杰出的伐木引擎,并观察它们在许多比赛中的表现。 现在,在拿出割炬和干草叉之前,我想澄清一下,并不是要说哪个更好,而是要了解在许多常见的记录任务中引擎之间的吞吐量差异。
参赛者
- Log4J
- Log4J2
- 退回
- SLF4J简单记录(SLF4J SL)
- Java Util记录(JUL)
种族
我们想看看引擎如何比较一组标准的日志记录活动。 每个日志记录操作都包括一个时间戳和一个线程ID作为其上下文。
这些是种族:
- 记录字符串常量
- 记录POJO的.toString()值
- 记录可抛出对象
- 记录没有时间/ tid上下文的字符串常量
轨道
我们决定每场比赛进行5次预赛,以确定最佳成绩,并衡量完成的伐木作业次数。 在每个测试中,我们都给日志记录引擎一个任务,以便在一分钟内跨10个线程执行(测试分别运行)。 然后,我们取出偏差最大的2个加热点,并对其余3个结果取平均值。
在每个单独的日志记录操作之间,我们给CPU做一些工作来在日志记录操作之间放置一些空间(检查是否有小的随机数是素数)。 引擎均使用其默认配置在SLF4J后面运行。 基准测试是在Amazon m1.large EC2实例上运行的。
结果
要查看完整的数据集– 单击此处 。
第1场–字符串常量
在这场比赛中,引擎正在记录一个字符串常量以及线程和时间戳上下文。 Log4J在这里显然是赢家,能够写的行数比JUL多了270%,比logback多了12.5%,比SLF4J SL多了52%。 值得注意的是,在更改Log4J2的配置之前,可以少写入4X(!)行,而swtich将其提升为#3,而写入的行数仅比logback少30%。
第2场– .toString()
在这场比赛中,引擎正在记录POJO(通过其.toString)以及线程和时间戳上下文。 Log4J2排在第1位,与SLF4J SL排在第2位相比,具有25%的优势(变更后),这里的结果更加接近。 Log4J和Logback在#3位置并驾齐驱,JUL以SLF4J SL的88%吞吐率获得白银。
种族#3 –投掷
在这场比赛中,引擎正在记录异常对象和描述字符串以及线程和时间戳上下文。 在此竞赛中,Log4J2着火了,与#5的SLF4J SL相比,在#1处记录的行数超过行的3倍(!)。
Log4J和Logback也被遗忘了,记录的次数不到我们尊敬的获胜者的一半。 7月排在第二名,与我们的获胜者相比,记录了82%的比赛成绩-不错。
第4场比赛(赤脚跑步)– .toString()减去上下文
处理服务器日志时,每个条目的上下文(例如,线程ID,类上下文,时间戳等)几乎与条目本身的内容一样重要。 在以前的比赛中,我们使用了在大多数服务器日志条目中可以找到的两个最常见的上下文元素-线程ID和时间戳。 我们认为通过运行.toString()竞赛而不使用任何引擎的上下文附加程序来分析这些开销非常有趣。
Log4J2是这里的赢家(更改会议后,获得180%的提振),Logback和JUL领先25%。 SLF4J SL紧随其后。 令人困惑的是,在5种不同的加热条件下,SLF4J SL使用添加器的效果要好于不使用添加器的效果(我们很乐意在评论中听到您对此的想法)。
Log4J的最大亮点是吞吐量增加了15%。 JUL在此竞赛中的表现不如Log4J或Log4J2出色,但无论是否包含上下文数据,JUL都能提供几乎完全相同的结果。
我很想听听您的意见和建议。
- 您还可以在GitHub上签出代码。
翻译自: https://www.javacodegeeks.com/2013/12/the-logging-olympics-a-race-between-todays-top-5-java-logging-frameworks.html
记录奥运-当今五大Java记录框架之间的竞赛相关推荐
- java奥运会安排赛程问题_记录奥运-当今五大Java记录框架之间的竞赛
java奥运会安排赛程问题 开发人员:Takipi会告诉您何时新代码在生产中中断– Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2 日志记录实 ...
- java客户端程序用什么自动化测试_五大Java自动化测试框架
51CTO官微 技术资讯/行业精华/产品心得 多年来,Java一直是服务器端应用开发的首选编程语言.随着时间的推移和自动化测试的兴起,业界出现了许多基于Java,并根据不同的业务逻辑而发展起来的开源框 ...
- java记录目录树_Java记录
java记录目录树 https://openjdk.java.net/jeps/359概述了Java的新功能,该功能可能会/将在某些将来的Java版本中实现. JEP建议使用一种新的"类别& ...
- Java集合框架笔记记录 --- 原创@余胜军 但有个人心得
Java集合框架课程安排 1.集合框架API知识 List/Set/Map集合 2.常见数据结构 数组/链表/队列/树 3.集合源码解读 List/Set/Map1.为什么需要学习Java中集合框架呢 ...
- java10个基础错误_我们处理了10亿个Java记录的错误-这是导致97%的错误的原因
java10个基础错误 97%的记录错误是由10个唯一错误引起的 在2016年,一件事在30年内没有改变. 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除. 由于某些未知原因,我们隐式信任日志 ...
- 我们处理了10亿个Java记录的错误-这是导致97%的错误的原因
97%的记录错误是由10个唯一错误引起的 在2016年,一件事已经30年没有改变了. 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除. 由于某些未知原因,我们隐式地信任日志文件,因为我们认为事 ...
- 实习记录(一) Java 编程风格规约
一.前言 本文为<码出高效>系列博文第一篇,主要目的是统一和规范代码编程风格,改善应用程序的可读性,提高开发效率.规约包括命名.定义.函数.异常.排版等不同的场景,结合个人的实习经验和业界 ...
- 记录自己第一个java学习博客
记录自己第一个java学习博客 阿里java规范 弄懂 JRE.JDK.JVM 之间的区别与联系 DOS常用命令 常用mac终端命令 今天我学习了java第一个程序打印出helloworld! pac ...
- java的时间变化_通过java记录数据持续变化时间代码解析
这篇文章主要介绍了通过java记录数据持续变化时间代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.需求:获取count为null和不为n ...
最新文章
- ‘百度杯’十月场web ---login
- 科普:Flume是啥?干嘛用的?
- 总结Movies MVC3教程示例的知识点
- 私有云存储搭建(owncloud)
- Numpy中的堆叠(stack)操作
- webflux系列--基础
- 数据结构与算法问题 AVL二叉平衡树
- HDU 2586 How far away ?【LCA】
- android加一减一控件,Android的步进器(增加/减少值)控件?
- C++实现类似反射模式
- 配置WindowsLiveWriter,写cnblogs博客
- 生信装虚拟机好还是云服务器,学习小组Day2笔记--潘潘
- Python第三方模块的下载与安装
- Install JD-GUI on Mac OSX
- 名悦集团:开电动车会比开燃油车省钱吗?
- 【网络安全】前端程序员务必掌握的图片防盗链
- iit delhi_向印度最聪明的人学习—这里有来自IIT的300项免费课程即将开始
- tvp5150 gm7150配置
- 认知电子战 (1.1):传统电子战
- qt-qss之按键样式
热门文章
- IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 !!!!!!!!!!有用
- kali安装python3.7_Debian服务器之安装Python3.7
- hash地址_一致性Hash在负载均衡中的应用
- openshift_OpenShift Origin中的Kubernetes Spark运算符(第1部分)
- 净资产滚动率_净资产的结构
- 来的多可选_您的框架有多可扩展性?
- jpa 实体映射视图_JPA教程:映射实体–第1部分
- 编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)
- 使用Spring Cloud Gateway保护反应式微服务
- rome rss_RSS阅读器使用:ROME,Spring MVC,嵌入式Jetty