Log4j 2 日志记录组件第一部分--概述

Apache Log4j 2

Log4j 2是在前版本Log4j 1.x上的一次升级,提供了重要的改进,并且在提供了很多可以在logback上使用的一些改进。同时修复了在logback架构中的内在固有问题。

特点

API 分离

Log4j 2API独立于该实现部分,这样对于应用开发者来说,可以更清晰的知道他们能够使用的类和方法并保证向前兼容性。同时也使得Log4j团队可以安全并且以一个兼容的方式去继续改姓其内部实现。

Log4j API只代表日志记录的最上层,它可以组合Log4j的实现一起被使用,同时也可以和之前提到的logback组合一起被使用。Log4j``API比起SLF4J有几个优势点:

1.Log4j``api比起slf4j只支持String类型来讲额外支持日志Message类型

2.log4j api支持lambda表达式

3.log4j api提供了更多的日志方法

4.在slf4j支持参数化日志格式外,log4j api可以支持java中的java.text.MessageFormat来作为输出信息格式

5.log4j api提供了LobManager.shutdown()方法。基础的日志记录实现类如果想起作用必须实现Termminable接口

6.支持其他类似Markers的构造器,log levels,ThreadContext

性能提升–异步执行

log4j 2内包含了基于LMAX Disruptor包的下一代异步日志记录器,在多线程环境下异步日志记录器吞吐量是log4j 1.xlogback的18倍,并且同时延迟降低了几个数量级。在其他方面,log4j 2也是大幅度领先log4j 1.xlogback的,尤其是在多线程异步应用程序中。

支持多API

log4j2 api在提供最好的性能的同时,它还提供了支持其他组件的API,如`log4j 1.2,slf4j,Commons Logging,java.util.logging APIs 。

避免单一锁定

对于log4j 2api 应用程序编码的时候,始终可以选择使用任何SLF4J-兼容库来作为有着log4j-to-slf4j适配器的记录器实现。

自动重加载配置文件

类似logback,log4j 2可以自动的重新加载修改之后的配置文件,但是不像logback那样,它在重新配置文件的时候不会丢失任何日志事件。

预过滤

类似于logback,log4j 2支持基于上下文数据、标记、正则表达式还有log事件中的其他组件进行过滤。过滤可以指定对所有事件生效,可以在通过loggers之前或者在当事件通过appenders之时。另外,过滤器也可以喝loggers相关联,不像是logback那样,log4j 2的方式下,你可以在任务场景下使用该公共过滤器。

插件架构

log 4j使用了插件的方式去配置组件,这样的话,你不需要去写代码去创建和配置Appender,Layout,Pattern Converter等其他组件。log 4j在配置文件引用这个组件的时候会自动的识别并且使用它们。

属性值支持

你可以在配置文件中引用属性值。log 4j会直接使用配置的值替换默认值,log 4j传递给基础组件,组件会自动解析他们。属性可以从配置文件、系统属性、环境变量、线程环境的Map结构、在事件中的数据。使用者可以更进一步通过增加查找插件来定制属性。

Java 8 Lambda 支持

之前,如果构建一个消息太过昂贵,因为你需要在构建消息前去明确检查这个请求日志的等级是否开启可用。客户端代码运行在java 8的平台,可以支持lambda表达式。因为判断请求日等级是否启用的时候,Log4j不需要去评估lambda表达式。所以在代码方面可以使用的更少。

自定义日志等级

log 4j中,自定义日志可以很容易的在代码中或者配置文件中定义。不需要子类。

日志构建API

log 4j api中除了使用多个日志方法的一个之外,日志事件也可以使用构建器构造。

无垃圾

在稳定状态的日志收集中,log 4j 2在标准程序中会不会产生垃圾的。在web程序中有较少的垃圾。这减少了垃圾收集器的压力并且得到了更大的响应性能。因为GC基本不存在,所以不会有java清理垃圾的卡顿。

服务器的集成

版本2.10.0中加入了log4j-appserver模块来提高和tomcatjetty的集成交互性能。

云支持

版本2.10.0支持通过Lookup来访问docker容器信息和通过Spring Clound环境来访问和修改配置文件。并且在2.13.0版本进行了加强。增加访问spring bootKubernetes信息的支持。

兼容 log 4j 1.x

对于使用了log 4j 1.x方法的应用程序,log 4j 1.2-apilog 4j 2提供了兼容性。log 4j 2 的 2.13.0版本依旧支持旧版的配置文件。

硬件支持

log 4j 2 2.13.0版本要求java 8环境以上,2.12.1 要求java 7版本年以上。一些特性需要一些可选择的依赖库。这些特性所需要的依赖库会在文档中特别指出。

新鲜事

Log4j 2.14.1现已投入生产。Log4j 2的API与Log4j 1.x不兼容,但是可以使用适配器来允许应用程序继续使用Log4j 1.x API。适配器也可用于Apache Commons Logging,SLF4J和java.util.logging。

Log4j 2.14.1Log4j的最新版本。从Log4j 2.13.0开始,Log4j 2在运行时需要Java 8或更高版本。此版本包含新功能和修补程序,可以在最新的更改报告中找到。

Log4j 2.14.0包含一个新的layoutJsonTemplateLayout,旨在最终替代JsonLayout。顾名思义,它使用模板来定义要包含在JSON中的元素。该布局由GitHub上log4j2-logstash-layout的作者提供,他现在是Log4j社区的成员。

Log4j 2.14.0添加了对MongoDB 4的支持,并删除了对MongoDB 2的支持。

Log4j 2.14.1维护与以前版本的二进制兼容性。

おすすめ

転載: blog.csdn.net/weixin_41998764/article/details/117075421