Log4j 2的特性和改进

Posted 小杨Vita

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j 2的特性和改进相关的知识,希望对你有一定的参考价值。

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

以上是关于Log4j 2的特性和改进的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot使用Log4j

Log4j 2.0在开发中的高级使用具体解释—介绍篇

Ruby 2.2.0-preview1 发布

SpringBoot日志框架选型——Log4j2的配置与使用

如何部署和搭建测试log4j 2

如何部署和搭建测试log4j 2