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 等