JAVA開源日誌框架大比拼

來源:互聯網
上載者:User

HTTP://www.aliyun.com/zixun/aggregation/14223.html">應用系統中,日誌是不可缺少的重要組成部分,所有的應用的出錯資訊等都應該能在日誌檔中查找到, 有的應用系統日誌可能數量很小,有的龐大的應用系統的日誌是相當龐大,同時日誌檔必須是方便使用者定制和查找的,要具備很高的性能,否則會影回應用系統的性能。

由 于日誌通常涉及到IO讀寫磁片(或者是阻塞或者是非同步),這都要耗費時間。 當在大型系統中有大量資料的時候,日誌所耗費的時間就會顯現。 在本文中,將深入探討目前JAVA開源世界中領先的五個日誌框架,在各個方面進行比較,要指出的是,本文並不是探究哪個日誌框架是最優秀的,而只是列出各自的優缺點。

我們選取的五個日誌框架分別為:

1. Log4J

2. Log4J2

3. Logback

4. SLF4J Simple Logging (SLF4J SL)

5. JAVA Util Logging (JUL)

我們想對比下這些日誌框架對於基本的日誌記錄活動的性能如何,每一個日誌操作包括時間戳記和其上下文的進程ID。 我們進行如下四個方面的測評:

1.記錄字串常量

2. Logging the .toString() value of a POJO 對POJO使用.toString()方法

3. Logging a throwable object 記錄throwable物件4 只測試.toString()方法

我們決定為每種場景進行五次的評測,通過衡量完成日紙記錄的操作次數,以決定哪一個有最佳的成績。 在每次測試中讓日誌引擎在一分鐘內使用10個執行緒去執行,並且剔除最大的2次偏差,將餘下的三次進行平均。

在每一個單獨的日誌記錄操作中,我們讓CPU在日誌記錄的時候都執行一些操作(如檢查是否一個亂數是否素數)。 這些評測的日誌引擎都使用各自的預設配置通過SLF4J來運行。 評測是在Amazon m1.large EC2實例上進行的。

在 Log4j2的剛開始的測試中,我們設置了%C的佈局參數(參考:HTTP://logging.apache.org/log4j/2.x /manual/layouts.html),這增加了其開銷,在@ RemkoPopma的建議下,我們更新了設置為%c(日誌的名稱)以符合其他的配 置,這給Log4j2一個性能相當大的提升,在下面兩個圖中,值得注意的是記錄上下文的性能開銷。

使用%C的設置:

使用%C的設置:

完整的測試結果集參考這個連結:HTTPs://docs.google.com/spreadsheet/ccc?key=0Alceaf46X4GPdHBoLTdYQ29nRDh6V1dRY00zT1FwWWc& usp=sharing

下面對基於4個場景的測試結果進行具體分析:

一 字串常量

在 這輪比拼中,需要日誌引擎使用執行緒和時間戳記上下文去記錄字串常量。 Log4j是冠軍,比JUL能多寫270%的日誌行,比logback多12.5%, 比SLF4J SL多52%。 有趣的是在我們改變log4j2的配置前,它寫的行數能是比改變後的1/4左右,在更改配置後,性能排在第三位,只比logback記錄的 行數少30%。

二.toString()

在 這輪比拼中記錄的是POJO(使用其.toString方法),同樣使用的是執行緒和時間戳記。 結果中,對於Log4j2來說,和第一回合差不多,但相比 SLF4J SL有25%的性能提升。 Log4j和Logback是並駕齊驅的,位居第三,其輸送量是SLF4J SL的88%。

三.Throwable

在這輪比拼中,日誌引擎記錄異常的物件和相關的描述資訊。 其中Log4j2是位居首位,其性能比SLF4J SL高3倍,SLF4J SL位於第五位。

而Log4j和Logback也是只能排在此輪的冠軍之後,記錄的行數只大概有冠軍的一半,而第二位的反而是JUL,能記錄冠軍Log4j2的日誌量的大概82%。

四.toString()方法比拼

當 處理伺服器日誌的時候,每一個日誌項的上下文(例如執行緒ID,類的相關上下文,時間戳記等等)都是和日誌內容一樣重要。 在之前的測試中,使用的是在大多數日 志檔中常見的標誌――執行緒ID號和時間戳記。 接下來我們認為值得去分析單純在日誌中使用.toString()方法的性能。

這個時候,Log4j2是贏家(如果改變配置,能獲得180%的性能提升),贏出Logback和JUL 大概25%。 SL4FJ SL則落敗。 在每輪的五次測試中,SLF4J SL在啟用appenders的時候性能比不啟用要好。

Log4j在輸送量上有15%的增加。 JUL在這輪比拼中比不上Log4j和Log4j2,其結果和不使用上下文資料是一樣的。

本文的測試代碼可以在HTTPs://github.com/takipi/the-logging-olympics中下載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.