logback log4j log4j2 性能實測


logback log4j log4j2 性能實測


轉載:

https://blog.souche.com/logback-log4j-log4j2shi-ce/

日志已經成為系統開發中不可或缺的一部分. 但是針對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的新特性

  1. 丟數據這種情況少,可以用來做審計功能。而且自身內部報的exception會被發現,但是logback和log4j不會。
  2. log4j2使用了disruptor技術,在多線程環境下,性能高於logback等10倍以上。
  3. (garbage free)之前的版本會產生非常多的臨時對象,會造成GC頻繁,log4j2則在這方面上做了優化,減少產生臨時對象。盡可能少的GC
  4. 利用插件系統,使得擴展新的appender,filter,layout等變得容易,log4j不可以擴展 插件????
  5. 因為插件系統的簡單性,所以在配置的時候,可以不用具體指定所要處理的類型。class
  6. 可以自定義level
  7. Java 8 lambda support for lazy logging
  8. Support for Message objects
  9. 對filter的功能支持的更強大
  10. 系統日志(Syslog)協議supports both TCP and UDP
  11. 利用jdk1.5並發的特性,減少了死鎖的發生。
  12. Socket LogEvent SerializedLayout
  13. 支持kafka queue

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM