Log4j 2的特性和改進

本文譯自:
http://logging.apache.org/log4j/2.x/index.html

詳細目錄
Apache Log4j 2 中文文檔

Log4j 2的一些特性和改進

API分離

Log4j 2的API與實現是分離的,在保證向前兼容的前提下,這讓開發人員使用其類和方法時更加直觀清晰。同時也讓Log4j開發團隊能夠以一種兼容的方式更加安全地改進實現類。

性能提升

Log4j 2使用了下一代的異步Logger,它基於LMAX Disruptor庫(一個基於環形緩衝區的高性能進程間消息庫)。在多線程情景中,異步Logger比Log4j 1.x和Logback的吞吐量高了18倍,延遲也低了很多個數量級。具體的數據請看 異步日誌性能 。Log4j 2完勝Log4j 1.x、Logback以及java.util.logging,特別是在多線程應用中,詳細信息請看 性能

支持多種API

Log4j 2 API在提供了最佳性能的同時,還提供了對Log4j 1.2、SLF4J、Commons Logging 和 java.util.logging (JUL) API的支持(需要適配器)。

避免封鎖

通過使用 log4j-to-slf4j 適配器,使用Log4j 2 API編寫的應用通常可以選擇使用任何SLF4J標準庫作爲logger的實現。

自動重新加載配置文件

和Logback類似,當配置文件被修改時Log4j 2將自動重新加載。但與Logback不同的是,在重新加載過程中它不會丟失掉日誌事件。

插件架構

Log4j使用插件模式來配置組件,這麼以來你就不用手寫代碼來創建並配置Appender、Layout、Pattern轉換器了。當配置文件引用了某個插件時,Log4j將自動識別並使用之。

支持屬性替換

你可以在配置文件中引用屬性,Log4j會直接替換掉它們或是將其傳遞給底層組件來動態解析之。屬性值可以來自於配置文本、系統屬性、環境變量、 ThreadContext Map和事件中的數據。用戶還可通過添加自己的Lookup 插件來進一步定製屬性提供者。

支持Java 8 Lambda表達式

此前,當一個日誌消息需要花費比較大的代價來創建時,你通常需要先顯式地檢查日誌級別是否允許輸出。現在基於Java 8的應用可以享受Log4j Lambda表達式支持的便利,因爲Lambda表達式會被延遲執行,詳見示例

定製日誌級別

在Log4j 2中,日誌級別可以通過代碼或是配置文件輕鬆定義,無需子類化。

不產生垃圾

在穩定打印日誌時, Log4j 2不會在單機應用中產生垃圾 ,在web應用中僅產生少量的垃圾。這降低了垃圾收集器的壓力,同時提供了更好的響應性能。

轉載請註明出處:Log4j 2的特性和改進
http://blog.csdn.net/yangcheng33/article/details/52725882

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