Apache Log4j 2 Apache Log4j 2是對Log4j的升級,它比它的前輩Log4j 1提供了顯著的改進。在解決Logback的架構中存在的一些固有問題時,提供了許多可用的改進。 特性 API分離 Log4j的API與實現分離,使應用程式開發人員清楚地知道,他們可以使用哪些類和方法 ...
Apache Log4j 2
Apache Log4j 2是對Log4j的升級,它比它的前輩Log4j 1提供了顯著的改進。在解決Logback的架構中存在的一些固有問題時,提供了許多可用的改進。
特性
API分離
Log4j的API與實現分離,使應用程式開發人員清楚地知道,他們可以使用哪些類和方法來確保向前相容性。這允許Log4j團隊以一種相容的方式安全地改進實現。
改進的性能
Log4j 2包含了基於LMAX破壞者庫的下一代非同步日誌記錄器。在多線程場景中,非同步日誌記錄器的吞吐量比Log4j 1要高18倍,並且數量級要低。Log4j 1.x和Logback。有關詳細信息,請參閱非同步日誌記錄性能。否則,Log4j 2將顯著優於Log4j 1。x,Logback java.util。日誌記錄,特別是在多線程應用程式中。更多信息請參見性能。
支持更多API Log4j 2 API將提供最好的性能,Log4j 2為Log4j 1.2、SLF4J、Commons日誌記錄和java.util提供了支持。日誌(7月)api。避免鎖定
對Log4j 2 API進行編碼的應用程式總是可以選擇使用任何slf4j相容的庫作為它們的日誌程式實現,使用log4jslf4j適配器。
自動重新載入配置
與Logback一樣,Log4j 2可以在修改後自動重新載入它的配置。與Logback不同的是,在重新配置的情況下,它將不會丟失日誌事件。
先進的過濾
與Logback一樣,Log4j 2支持基於上下文數據、標記、正則表達式和日誌事件中的其他組件進行過濾。在傳遞給日誌記錄器或通過appender之前,可以指定過濾應用於所有事件。此外,過濾器還可以與日誌記錄器相關聯。與Logback不同的是,你可以在任何情況下使用一個通用的過濾器類。
插件體繫結構
Log4j使用插件模式來配置組件。因此,您不需要編寫代碼來創建和配置Appender、佈局、模式轉換器等等。Log4j自動識別插件併在配置引用它們時使用它們。
屬性的支持
您可以在配置中引用屬性,Log4j將直接替換它們,或者Log4j將把它們傳遞給一個將動態解析它們的底層組件。屬性來自於配置文件中定義的值、系統屬性、環境變數、ThreadContext映射和事件中的數據。用戶可以通過添加自己的Lookup Plugin來進一步定製屬性提供者。
Java 8λ支持
在此之前,如果一個日誌消息的構建成本很高,那麼在構造消息之前,您通常會顯式地檢查請求的日誌級別是否啟用。在Java 8上運行的客戶機代碼可以從Log4j的lambda支持中獲益。由於Log4j不會對一個lambda表達式進行評估,如果請求的日誌級別沒有啟用,那麼使用較少的代碼就可以實現相同的效果。
自定義日誌級別
在Log4j 2中,可以很容易地在代碼或配置中定義自定義日誌級別。不需要子類化。
版本支持
在版本2.9.1中,Log4j支持Java 9,但是仍然可以在Java 7或8中工作。在這個版本中,log4j-api被打包為一個多版本jar,並且支持StackWalker和Process api的使用。
在版本2.4中,Log4J需要Java 7。
Log4j版本2.3和舊版本需要Java 6。
支持特性
XML configuration、Properties configuration、JSON configuration
CSV Layout、JSON Layout、XML Layout
Async Loggers
Kafka Appender、SMTP Appender、JMS Appender、JDBC Appender、JPA Appender、NoSQL Appender with MongoDB provider 等