logback log4j log4j2 性能實測

 

日誌已經成爲系統開發中不可或缺的一部分. 但是針對logback, log4j和log4j2. 究竟改如何選擇? 到底性能如何? 今天我們做一個實際的測評. 相信看完這篇文章, 對這三個日誌框架會有很清楚的一個瞭解.

實驗環境

OS: Mac OS X 10.12.1
CPU: 2.6 GHz Intel Core i5
內存: 8 GB 1600 MHz DDR3
爲了說明, 測試的準確性, 把測試過程展示出來

首先 把項目建起來 log4j-1.2.17, logback-1.1.7, log4j2-2.7, slf4j-api-1.7.21 保證用的jar包版本都一樣.

然後配置各自的配置文件, 我們爲了保證測試效果, 三種框架採取同樣的輸出格式, 在異步輸出的時候, 都採取512的緩存.

log4j.xml

logback.xml

 

log4j2.xml

寫兩個測試方法

 

看結果

可見在同步日誌模式下, Logback的性能是最糟糕的.
而log4j2的性能無論在同步日誌模式還是異步日誌模式下都是最佳的.
其根本原因在於log4j2使用了LMAX, 一個無鎖的線程間通信庫代替了, logback和log4j之前的隊列. 併發性能大大提升, 下期文章將研究一下LMAX, 到底是什麼

實用信息

關於log4j2的新特性

丟數據這種情況少,可以用來做審計功能。而且自身內部報的exception會被發現,但是logback和log4j不會。
log4j2使用了disruptor技術,在多線程環境下,性能高於logback等10倍以上。
(garbage free)之前的版本會產生非常多的臨時對象,會造成GC頻繁,log4j2則在這方面上做了優化,減少產生臨時對象。儘可能少的GC
利用插件系統,使得擴展新的appender,filter,layout等變得容易,log4j不可以擴展 插件????
因爲插件系統的簡單性,所以在配置的時候,可以不用具體指定所要處理的類型。class
可以自定義level
Java 8 lambda support for lazy logging
Support for Message objects
對filter的功能支持的更強大
系統日誌(Syslog)協議supports both TCP and UDP
利用jdk1.5併發的特性,減少了死鎖的發生。
Socket LogEvent SerializedLayout
支持kafka queue
————————————————
版權聲明:本文爲CSDN博主「專注服務端」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yjh1271845364/article/details/70888262

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章