记录奥运-当今五大Java记录框架之间的竞赛
開發(fā)人員:Takipi會(huì)告訴您何時(shí)新代碼在生產(chǎn)中中斷–
Log4J vs SLF4J簡(jiǎn)單vs Logback vs Java Util日志記錄vs LOG4J2
日志記錄實(shí)際上是每個(gè)服務(wù)器端應(yīng)用程序中古老而固有的部分。 這是應(yīng)用程序以持久且可讀的方式輸出實(shí)時(shí)狀態(tài)的主要方法。 某些應(yīng)用程序每天可能僅記錄幾兆字節(jié),而其他應(yīng)用程序可能會(huì)在數(shù)小時(shí)內(nèi)記錄千兆字節(jié)或更多的數(shù)據(jù)。
由于日志記錄通常涉及IO將數(shù)據(jù)寫入磁盤(阻塞或異步)–因此需要付出一定的代價(jià)。 在短時(shí)間內(nèi)記錄大量數(shù)據(jù)時(shí),該成本會(huì)Swift增加。 我們決定更深入地研究當(dāng)今一些領(lǐng)先的日志記錄引擎的速度。
大多數(shù)開發(fā)人員記錄數(shù)據(jù)的原因主要有以下三個(gè):
在立面的后面 。 如今,大多數(shù)庫都在代碼的關(guān)鍵點(diǎn)內(nèi)置了日志,以提供對(duì)其操作的可見性。 為了簡(jiǎn)化此過程并防止不同的庫在同一個(gè)JVM中使用多種日志記錄方法,將代碼與底層引擎分離的日志記錄Facade成為最重要的問題。 當(dāng)我們分析Java的前100個(gè)軟件庫時(shí) ,SLF4J成為當(dāng)今開發(fā)人員使用的主要日志記錄外觀。
比賽
我們決定選擇五個(gè)當(dāng)今最杰出的伐木引擎,并觀察它們?cè)谠S多比賽中的表現(xiàn)。 現(xiàn)在,在拿出割炬和干草叉之前,我想澄清一下,并不是要說哪個(gè)更好,而是要了解在許多常見的記錄任務(wù)中引擎之間的吞吐量差異。
參賽者
種族
我們想看看引擎如何比較一組標(biāo)準(zhǔn)的日志記錄活動(dòng)。 每個(gè)日志記錄操作都包括一個(gè)時(shí)間戳和一個(gè)線程ID作為其上下文。
這些是種族:
軌道
我們決定每場(chǎng)比賽進(jìn)行5次預(yù)賽,以確定最佳成績(jī),并衡量完成的伐木作業(yè)次數(shù)。 在每個(gè)測(cè)試中,我們都給日志記錄引擎一個(gè)任務(wù),以便在一分鐘內(nèi)跨10個(gè)線程執(zhí)行(測(cè)試分別運(yùn)行)。 然后,我們?nèi)〕銎钭畲蟮?個(gè)加熱點(diǎn),并對(duì)其余3個(gè)結(jié)果取平均值。
在每個(gè)單獨(dú)的日志記錄操作之間,我們給CPU做一些工作來在日志記錄操作之間放置一些空間(檢查是否有小的隨機(jī)數(shù)是素?cái)?shù))。 引擎均使用其默認(rèn)配置在SLF4J后面運(yùn)行。 基準(zhǔn)測(cè)試是在Amazon m1.large EC2實(shí)例上運(yùn)行的。
結(jié)果
要查看完整的數(shù)據(jù)集– 單擊此處 。
第1場(chǎng)–字符串常量
在這場(chǎng)比賽中,引擎正在記錄一個(gè)字符串常量以及線程和時(shí)間戳上下文。 Log4J在這里顯然是贏家,能夠?qū)懙男袛?shù)比JUL多了270%,比logback多了12.5%,比SLF4J SL多了52%。 值得注意的是,在更改Log4J2的配置之前,可以少寫入4X(!)行,而swtich將其提升為#3,而寫入的行數(shù)僅比logback少30%。
第2場(chǎng)– .toString()
在這場(chǎng)比賽中,引擎正在記錄POJO(通過其.toString)以及線程和時(shí)間戳上下文。 Log4J2排在第1位,與SLF4J SL排在第2位相比,具有25%的優(yōu)勢(shì)(變更后),這里的結(jié)果更加接近。 Log4J和Logback在#3位置并駕齊驅(qū),JUL以SLF4J SL的88%吞吐率獲得白銀。
種族#3 –投擲
在這場(chǎng)比賽中,引擎正在記錄異常對(duì)象和描述字符串以及線程和時(shí)間戳上下文。 在此競(jìng)賽中,Log4J2著火了,與#5的SLF4J SL相比,在#1處記錄的行數(shù)超過行的3倍(!)。
Log4J和Logback也被遺忘了,記錄的次數(shù)不到我們尊敬的獲勝者的一半。 7月排在第二名,與我們的獲勝者相比,記錄了82%的比賽成績(jī)-不錯(cuò)。
第4場(chǎng)比賽(赤腳跑步)– .toString()減去上下文
處理服務(wù)器日志時(shí),每個(gè)條目的上下文(例如,線程ID,類上下文,時(shí)間戳等)幾乎與條目本身的內(nèi)容一樣重要。 在以前的比賽中,我們使用了在大多數(shù)服務(wù)器日志條目中可以找到的兩個(gè)最常見的上下文元素-線程ID和時(shí)間戳。 我們認(rèn)為通過運(yùn)行.toString()競(jìng)賽而不使用任何引擎的上下文附加程序來分析這些開銷非常有趣。
Log4J2是這里的贏家(更改會(huì)議后,獲得180%的提振),Logback和JUL領(lǐng)先25%。 SLF4J SL緊隨其后。 令人困惑的是,在5種不同的加熱條件下,SLF4J SL使用添加器的效果要好于不使用添加器的效果(我們很樂意在評(píng)論中聽到您對(duì)此的想法)。
Log4J的最大亮點(diǎn)是吞吐量增加了15%。 JUL在此競(jìng)賽中的表現(xiàn)不如Log4J或Log4J2出色,但無論是否包含上下文數(shù)據(jù),JUL都能提供幾乎完全相同的結(jié)果。
我很想聽聽您的意見和建議。
- 您還可以在GitHub上簽出代碼。
翻譯自: https://www.javacodegeeks.com/2013/12/the-logging-olympics-a-race-between-todays-top-5-java-logging-frameworks.html
總結(jié)
以上是生活随笔為你收集整理的记录奥运-当今五大Java记录框架之间的竞赛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 热用英语怎么说 热英语解释
- 下一篇: 大型布线:Java云应用程序缺少的技术