java奥运会安排赛程问题_记录奥运-当今五大Java记录框架之间的竞赛

java奥运会安排赛程问题

开发人员:Takipi会告诉您何时新代码在生产中中断–

博客运行

Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2

日志记录实际上是每个服务器端应用程序中古老且固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些应用程序每天可能仅记录几兆字节,而其他应用程序可能会在数小时内记录千兆字节或更多的数据。

由于日志记录通常涉及IO将数据写入磁盘(阻塞或异步)–因此需要付出一定的代价。 在短时间内记录大量数据时,该成本会Swift增加。 我们决定更深入地研究当今一些领先的日志记录引擎的速度。

大多数开发人员记录数据的原因主要有以下三个:

  1. 监视 –查看代码在吞吐量,规模,安全性等方面的行为。
  2. 调试 –访问导致代码失败的状态(变量,堆栈跟踪…)。 Takipi帮助开发人员调试登台服务器和生产服务器,并了解代码崩溃和线程冻结的原因。
  3. 分析 –利用应用程序中的实时数据来得出有关其使用方式的结论。

在立面的后面 。 如今,大多数库都在代码的关键点内置了日志,以提供对其操作的可见性。 为了简化此过程并防止不同的库在同一JVM中采用多种日志记录方法,将代码与底层引擎分离的日志记录Facade成为最重要的问题。 当我们分析Java的前100个软件库时 ,SLF4J成为当今开发人员使用的主要日志记录界面。

竞赛

我们决定选择五个当今最杰出的测井引擎,并观察它们在许多比赛中的表现。 现在,在取出割炬和干草叉之前,我想说明的并不是要说哪个更好,而是要了解在许多常见的日志记录任务中引擎之间的吞吐量差异。

参赛者

  1. Log4J
  2. Log4J2
  3. 退回
  4. SLF4J简单记录(SLF4J SL)
  5. Java Util记录(JUL)

种族

我们想看看引擎如何比较一组标准的日志记录活动。 每个日志记录操作都包括一个时间戳和一个线程ID作为其上下文。

这些是种族:

  1. 记录字符串常量
  2. 记录POJO的.toString()值
  3. 记录可抛出对象
  4. 记录没有时间/ tid上下文的字符串常量

轨道

我们决定为每场比赛举行五次预赛,以确定最佳成绩,衡量完成的伐木作业次数。 在每个测试中,我们都给日志记录引擎一个任务,使其在一分钟内跨10个线程执行(测试分别运行)。 然后,我们取出偏差最大的2个加热点,并对其余3个结果取平均值。

在每个单独的日志记录操作之间,我们给CPU做一些工作来在日志记录操作之间放置一些空间(检查是否有小的随机数是素数)。 引擎均使用其默认配置在SLF4J后面运行。 基准测试是在Amazon m1.large EC2实例上运行的。

结果

对数奥林匹克结果2

对数奥林匹克后更改

要查看完整的数据集– 单击此处 。

第1场–字符串常量

在这场比赛中,引擎正在记录一个字符串常量以及线程和时间戳上下文。 Log4J在这里无疑是赢家,能够写的行数比JUL多了270%,比logback多了12.5%,比SLF4J SL多了52%。 值得注意的是,在更改Log4J2的配置之前,可以少写入4X(!)行,而swtich将其提升为#3,而写入的行数仅比logback少30%。

第2场– .toString()

在这场比赛中,引擎正在记录POJO(通过其.toString)以及线程和时间戳上下文。 Log4J2排在第一位,与SLF4J SL排在第二位相比,具有25%的优势(变更后),这里的结果更加接近。 Log4J和Logback在#3点上并驾齐驱,JUL以SLF4J SL的88%吞吐率获得白银。

第三场比赛-投掷

在这场比赛中,引擎正在记录异常对象和描述字符串以及线程和时间戳上下文。 在此竞赛中,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上签出代码。

参考: The Logging Olympics –在我们的Jaki 合作伙伴 Tal Weiss的Takipi博客上, 探讨了 当今最重要的5种Java日志记录框架之间的竞赛 。

翻译自: https://www.javacodegeeks.com/2013/12/the-logging-olympics-a-race-between-todays-top-5-java-logging-frameworks.html

java奥运会安排赛程问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么在子类中不重写超类的实例变量

当我们在父类和子类中创建一个具有相同名称的变量,并尝试使用持有子类对象的父类引用访问它时,我们会得到什么? 为了理解这一点,让我们考虑下面的示例,其中在Parent和Child类中声明一个具有相同名称的变量x 。 class…

cocos lua调用java_【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(三)

上周五下班前,打包成功了。我很高兴,周六去踢场足球,周日去现场看了最后一分钟掉球的恒大,度过了一个愉快的周末。然后,噩梦的周一开始了。我再次打包,打算打包就安装,但结果是失败的。为何&…

github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库

github上java项目随着Java开发人员使用既成熟又高度发展的语言来工作,无论何时编写新代码,我们都将面临一个持续的困境–使用大家都在谈论的热门新技术,或者坚持使用久经考验的库? 由于Java应用程序的很大一部分是商业性质的&…

char java 回文_LeetCode刷题笔记(Java)---第1-18题

题目来自LeetCode文章目录全部章节1-18题19-40题41-60题61-80题81-100题101-120题121-140题1.两数之和2.两数相加3.无重复字符串的最长子串4.寻找两个有序数组的中位数5.最长回文子串6.Z 字形变换7.整数反转8.字符串转换整数 (atoi)9.回文数10.正则表达式匹配11.盛最多水的容器…

使用PostgreSQL使用Spring Boot和JPA构建基本应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 每个不平凡的应用程序都需要一种保存和更新数据的方法:可通过HTTP访问的资…

通过示例了解Apache Ignite Baseline拓扑

点燃基准拓扑或BLT表示群集中的一组服务器节点,这些服务器节点将数据持久存储在磁盘上。 其中,N1-2和N5服务器节点是具有本机持久性的Ignite集群的成员,这些集群使数据能够持久存储在磁盘上。 N3-4和N6服务器节点是Ignite群集的成员&#x…

Spring Boot集成测试中@ContextConfiguration和@SpringApplicationConfiguration之间的区别

即使同时使用ContextConfiguration和SpringApplicationConfiguration批注以及SpringJUnit4ClassRunner来指定如何加载Spring应用程序上下文,它们之间也存在细微的差异。 尽管ContextConfiguration在加载应用程序上下文方面表现出色,但没有充分利用Spring…

vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

vert.x中断了将近半年后发表了一篇新文章。 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程。 我们将涵盖以下主题: 使用Maven创建一个空的vert.x项目 导入IntelliJ并创建一个简单的H…

如何通过Rultor将Maven工件部署到CloudRepo

在我以前的文章中 ,我描述了如何在Amazon S3中设置私有Maven存储库并通过Rultor进行部署。 如果您熟悉管理Amazon Web Services(AWS), S3和AWS Identity and Access Management(IAM)的话,这是一…

java里面自行车的属性_11、Java基础知识

1、安装jdk,配置环境变量2、public class HelloWorld{publicstatic void main(String[] args){System.out.println(‘HelloWorld’);}}3、编译过程:通过javac编译java文件,生成.class文件,使用java命令运行class文件,注…

布线问题分支限界法java_大型布线:Java云应用程序缺少的技术

布线问题分支限界法java您是否曾经想过,为什么大多数Java框架中的依赖项注入仅用于本地进程内服务而不是分布式服务? 我最近在2013年EMC世界大会上遇到了Paul Maritz的主题演讲 (跳至第32分钟),这使我在云平台的背景下…

Spring Boot微服务,Docker和Kubernetes研讨会–第2部分

在上一篇文章中,我们使用SpringBoot和Docker创建了第一个微服务“ ProductService”。 在这一部分中,我们将详细介绍如何使用Spring Cloud,netflix库,API网关来管理多个微服务。 假设对于我们的订单管理系统,最小关系…

jboss5.1安全性配置_使用Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全

jboss5.1安全性配置企业应用程序的一个常见要求是在登录页面后面保护所有JSF页面。 有时,您甚至希望在应用程序内部具有保护区,只有拥有特定角色的用户才能访问这些保护区。 Java EE标准附带了实现受某些安全性约束保护的Web应用程序所需的所有方法。 在…

分布式事务 camel_使用Camel在Amazon上构建分布式工作流应用程序

分布式事务 camel带有SNS-SQS的管道 工作流由以动态条件确定的特定顺序执行的独立任务组成。 工作流通常代表业务流程,例如电子商务商店中的订单处理步骤。 Amazon Web Services提供了用于构建分布式和可伸缩工作流应用程序的各种工具。 构建此类应用程序的一种方法…

比较Java REST文档框架

确定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中,我们将简要比较我们自己使用的REST Web服务的三种文档框架,以及它们如何与Spring框架(这是Foreach最常使用的Java框架)集成。 这些是RESTful API建模语言&#xff0…

jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏

原标题:《三国志英杰传》到底是怎样的一款游戏介绍作为PC平台上经典的战棋策略类游戏,英杰传系列可谓把这一类型游戏在战略性和资源获取上的精髓发挥的淋漓尽致。系列初代的《三国志英杰传》诞生在1995年的DOS系统上,虽然我接触英杰传时已经是…

jvm 内存镜像_镜像镜像–使用反射在运行时查看JVM内部

jvm 内存镜像开发人员:Takipi会告诉您何时新代码在生产中中断– 了解更多 我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射。 它是Java和Scala编程的主要方面,它使我们使用的库可以与我们的代码进行交互,而无需对其进行硬…

谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!

有没有想过圣诞老人如何为世界各地的孩子们送上节日礼物? 有20亿个孩子,每个孩子都有自己的愿望清单,他会在24小时内完成。 这意味着每个孩子平均需要43微秒,他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我会透露这个秘密…

php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本

$ttime();echo date("Y-m-d H:i:s",$t);第一个参数的格式分别表示:a - "am" 或是 "pm"A - "AM" 或是 "PM"d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"D - 星期几…

play框架配置 拦截器_如何使用Play框架为https配置SSL证书

play框架配置 拦截器我花了几个小时试图使它起作用,最后,问题是我自己没有使用keytool生成CSR(证书请求)。 当我尝试通过https访问Play时,我一直收到此错误: javax.net.ssl.SSLPeerUnverifiedException&a…