本文譯自:
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