天天看點

log4j2簡介

各種日志簡介

在介紹log4j2之前先簡單介紹一下Log4j、Logback、SFL4J、JUL、JCL這些東西是什麼以及有啥作用。

Log4j是什麼地球人應該都知道。log4j是Log for Java的簡稱,是Apache的一個開源子項目,有7種不同的日志級别,從低到高一次為TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF,支援properties和xml兩種配置檔案,包含Logger、appender、Layout三個主要元件。

SFL4J是Simple Logging Facade for Java的簡稱,不是具體的日志解決方案,它隻服務于各種各樣的日志系統,類似于JDBC。主要應用于庫類應用或者嵌入式元件。

Logback和Log4j非常相似,但是有很多改進,有更快的速度更低的記憶體消耗,某些場景速度比log4j有10背的提升,另外logback實作了sel4jAPI使可以很友善的更換成其他系統。

以上三者的作者都是Ceki Gülcü。

JUL是java.util.logging的簡稱,是Java自己提供的日志架構,類似于Log4J,但是API并不完善,對開發者不是很友好,而且對于日志的級别分類也不是很清晰。

JCL是Jakarta Commons-Logging的簡稱。JCL和SLF4J非常類似,也是提供的一套API來掩蓋了真正的Logger實作。便于不同的Logger的實作的替換,而不需要重新編譯代碼。缺點在于它的查找Logger的實作者的算法比較複雜,而且當出現了一些class loader之類的異常時,無法去修複它。

log4j2

Log4j 2是Log4j 1.x的更新版版,在Log4j 1.x的基礎上做了顯著改善,相比logBack有了很多改進,修複了Logback體系結構上固有的一些問題。

我之前在系統開發的時候用的是log4j,上線前做壓測的時候性能很不理想,jstack一看發現很多log4j相關的線程在等待資源,明顯是卡在log4j上了,本來是想用logback後來發現log4j2功能更多效果更好,果斷用上了,當時用的時候主要還是考慮性能。

Log4j 2的性能提升主要展現在利用了jdk5的樂觀鎖機制和異步logger,官方是這麼描述的:

Log4j 2 contains next-generation lock-free Asynchronous Loggers based on the LMAX Disruptor library. In multi-threaded scenarios Asynchronous Loggers have 10 times higher throughput and orders of magnitude lower latency than Log4j 1.x and Logback.

Log4j 2 takes advantage of Java 5 concurrency support and performs locking at the lowest level possible. Log4j 1.x has known deadlock issues. Many of these are fixed in Logback but many Logback classes still require synchronization at a fairly high level.

log4j2的官方介紹雖然完美,但是也是有缺點的,目前使用還不是特别成熟,老的項目貿然改用log4j2是有一定風險的,目前我們的系統跑了7 8個月也沒發現什麼問題,性能非常不錯。

本文轉自 古道卿 51CTO部落格,原文連結:http://blog.51cto.com/gudaoqing/1427228