Apache Log4j 2java
Apache Log4j 2是對Log4j的升級,它比它的前輩Log4j 1提供了顯著的改進。在解決Logback的架構中存在的一些固有問題時,提供了許多可用的改進。正則表達式
特性api
API分離安全
Log4j的API與實現分離,使應用程序開發人員清楚地知道,他們可使用哪些類和方法來確保向前兼容性。這容許Log4j團隊以一種兼容的方式安全地改進實現。多線程
改進的性能架構
Log4j 2包含了基於LMAX破壞者庫的下一代異步日誌記錄器。在多線程場景中,異步日誌記錄器的吞吐量比Log4j 1要高18倍,而且數量級要低。Log4j 1.x和Logback。有關詳細信息,請參閱異步日誌記錄性能。不然,Log4j 2將顯著優於Log4j 1。x,Logback java.util。日誌記錄,特別是在多線程應用程序中。更多信息請參見性能。app
自動從新加載配置異步
與Logback同樣,Log4j 2能夠在修改後自動從新加載它的配置。與Logback不一樣的是,在從新配置的狀況下,它將不會丟失日誌事件。ide
先進的過濾佈局
與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 等