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 等