记录奥运-当今五大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上下文的字符串常量

轨道

我们决定每场比赛进行5次预赛,以确定最佳成绩,并衡量完成的伐木作业次数。 在每个测试中,我们都给日志记录引擎一个任务,以便在一分钟内跨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排在第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上签出代码。

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

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

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

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

相关文章

移动端实现元素拖拽效果插件_基于自然流布局的可视化拖拽搭建平台设计方案...

LowCode 是高效、高性能的拖拽式低代码开发平台. 也是笔者最近一直在研究的方向, 对于可视化搭建平台的实现方案笔者之前写过很多文章, 这里带大家探索一个新方向——基于自然流布局的可视化搭建平台.在我们之前实现的 h5-dooring 搭建平台中, 我们采用了网格布局的方式来实现拖…

07-数据类型

【转】07-数据类型 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考链接:http://www.runoob.com/mysql/mysql-data-types.html mysql常用数据类型概括&#x…

yii::$app-mongodb 查询纪录数_老詹总决赛有多强?12项数据领先乔丹科比,已握10项数据纪录...

勒布朗詹姆贡献了38分16个篮板和10个助攻的狂暴三双数据,并率领湖人淘汰了掘金,这使得他迈进了职业生涯第10次总决赛舞台。我们都知道,詹姆斯几乎统治着NBA季后赛大部分数据纪录,事实上,他在总决赛同样如此。根据《sta…

前端共享桌面_2020 前端学习路线总结,哎呦,不错哦!

2020 前端学习路线总结在 GitHub 看到一个很不错的前端学习路线图(roadmap),从前端基础到前端工程化,再到跨端,都有知识点的覆盖,非常推荐阅读。图下面是我翻译的一个文字版,可以先看图再看文字…

Confluence 6 高级性能诊断

请在你的系统服务请求中包括下面所有的信息,如果可能的话,你也可以在请求中包括你认为最有可能出现的问题。这样的话,可以避免我们进一步对你系统的问题进行询问。 系统信息 Confluence 服务器 你系统信息的屏幕截图 Confluences Administrat…

RequireJS使用注意地方

使用RequireJS做异步模块加载,有几点值得注意的地方: 1.模块定义两种写法 1. 存在依赖的函数式定义 如果模块存在依赖:则第一个参数是依赖的名称数组;第二个参数是函数,在模块的所有依赖加载完毕后,该函…

WildFly上具有AngularJS的Java EE 7和Java WebSocket API(JSR 356)

这篇博客文章描述了用于WebSocket协议的Java API(JSR 356) (这是Java EE 7平台的四个最新JSR之一),并提供了部署在WildFly 8上并可以在OpenShift上在线获得的具体应用程序。 [FR]版本的法语( HTML或PDF &a…

日期加减加1天_2小时整理了13个时间日期函数,动图演示简单易学,收藏备用吧...

Hello,大家好,今天跟大家整理汇总了13个工作中经常用到的日期与时间函数的使用方法,学会它们几乎可以解决所有工作中遇到的,关于日期与时间提取与转换的问题。话不多说,让我们直接开始吧一、了解时间与日期的本质工作中…

点云数据显示_vispy 显示 kitti 点云数据

国内博客找了一圈,居然没有发现有用 vispy 做可视化的代码,这里做一个简单的示例,代码大部分来自官方。import numpy as np import vispy.scene from vispy.scene import visuals import sys# Make a canvas and add simple view canvas vis…

Webpack 常用命令总结以及常用打包压缩方法

前言:Webpack是一款基于node的前端打包工具,它可以将很多静态文件打包起来,自动处理依赖关系后,生成一个.js文件,然后让html来引用,不仅可以做到按需加载,而且可以减少HTTP请求,节约…

CSS3 Filter详解(改变模糊度 亮度 透明度等方法)

文章目录 1.模糊2.灰度3.亮度4.对比度5.饱和度6.色相旋转7.反色8.阴影9.透明度10.褐色CSS3 Filter(滤镜)属性提供了提供模糊和改变元素颜色的功能。CSS3 Fitler 常用于调整图像的渲染、背景或边框显示效果。 -webkit-filter是css3的一个属性,…

laravel中使用offsetSet

首先不用offsetSet方法,使用laravel的硬添加属性如下: 下边使用offsetSet 转载于:https://www.cnblogs.com/qaing123/p/9672241.html

转3d视图快捷键_最全Solidworks快捷键,值得收藏!

SOLIDWORKS软件提供了很多实用的快捷键,如果我们熟练掌握这些快捷键无疑可以减轻工作强度和提高工作效率。当然我们也可以点击【工具】-【自定义】-【键盘】,自己定义一些快捷键。本文为大家整理一些常用的快捷键,多使用快捷键可以帮助我们节…

构建前端自动化工作流环境

目标:建一个自动化工作流环境 自动编译 自动合并 自动刷新 自动部署 工作流: 1 全局安装webpack 执行命令: npm install webpack webpack-cli -g 其中webpack-cil 是命令接口工具 2 初始化当前项目:npm init 然后一路回车…

大型布线:Java云应用程序缺少的技术

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

java cpu过高排查_涨薪秘籍:JAVA项目排查cpu负载过高

背景我负责的其中一个项目在空负载的情况下,CPU占用率依然保持着100%左右,线上、测试、开发的服务都一样;是什么导致的呢?在开发环境我查看了请求流量,这个流量可以忽略但CPU占用率一直在60%-100%之间浮动。分析问题流…

巧用css的border属性完成对图片编辑功能的性能优化

一、需求场景: 最近闲来无事,boss提出了一个要求,研究相关代码并完成一个关于编辑图片功能的性能优化,该功能的主要界面展示如下: 通过了几分钟的短暂试用,发现就是一个简单的裁剪并保存用户选择并上传的图…

求数的绝对值一定是正数_人教版初中数学七年级上册绝对值公开课优质课课件教案视频...

绝对值(习题课)导学案(教师版)【教学目标】1、能利用绝对值的性质求值。 2、通过复习绝对值,让学生对绝对值的理解更加深透。 3、通过复习,让学生掌握利用绝对值的代数和几何意义,并学会灵活运用…

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

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

java 十六进制转十进制_JAVA知识-分析JAVA中的重点和难点

Java中有很多内容在开发项目的过程中并不常用,但是却是很重要的部分,为了避免忘记,今天重新温习了一遍Java中的重点和难点,借此机会记录一下方便以后查找。本文主要分为以下几个部分:1.进制的相互转换2.Java中位运算符…