高性能日志框架 log4j 2 之 一

前言

本文是自学log4j2 ,参考阿帕奇官网,对log4j2 的官方文档翻译

Apache Log4j 2

Apache Log4j 2 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了许多 Logback 中可用的改进,同时修复了 Logback 架构中的一些固有问题。

重要:安全漏洞 CVE-2021-44832

摘要:当攻击者控制配置时,Apache Log4j2 通过 JDBC Appender 容易受到 RCE 的攻击。

细节

Apache Log4j2 版本 2.0-beta7 到 2.17.0(不包括安全修复版本 2.3.2 和 2.12.4)容易受到远程代码执行 (RCE) 攻击,其中有权修改日志配置文件的攻击者可以构建恶意配置 将 JDBC Appender 与引用 JNDI URI 的数据源一起使用,该 JNDI URI 可以执行远程代码。 此问题已通过将 JNDI 数据源名称限制为 Log4j2 版本 2.17.1、2.12.4 和 2.3.2 中的 java 协议来解决。

减轻

升级到 Log4j 2.3.2(适用于 Java 6)、

2.12.4(适用于 Java 7)

或 2.17.1(适用于 Java 8 及更高版本)

参考

有关旧版本 Log4j 的详细信息和缓解措施,请参阅安全页面。

重要提示:安全漏洞 CVE-2021-45105、CVE-2021-45046 和 CVE-2021-44228

有关这些安全问题的详细信息和缓解措施,请参阅安全页面。

特征

API 与实现分离

Log4j 的 API 与实现分开,使应用程序开发人员清楚他们可以使用哪些类和方法,同时确保向前兼容性。这允许 Log4j 团队以安全且兼容的方式改进实现。 Log4j API 是一个日志外观,当然可以与 Log4j 实现一起使用,但也可以在其他日志实现(例如 Logback)之前使用。与 SLF4J 相比,Log4j API 有几个优点:

  1. Log4j API 支持记录消息而不仅仅是字符串。
  2. Log4j API 支持 lambda 表达式。
  3. Log4j API 提供了比 SLF4J 多得多的日志记录方法。
  4. 除了 SLF4J 支持的“参数化日志”格式之外,Log4j API 还支持使用 java.text.MessageFormat 语法的事件以及 printf 样式的消息。
  5. Log4j API 提供了一个 LogManager.shutdown() 方法。底层日志实现必须实现 Terminable 接口才能使方法生效。
  6. 完全支持其他构造,例如标记、日志级别和 ThreadContext(又名 MDC)。

改进的性能

Log4j 2 包含基于 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 2 API 的应用程序始终可以选择使用任何符合 SLF4J 的库作为它们的记录器实现和 log4j-to-slf4j 适配器。

自动重新加载配置

与 Logback 一样是,Log4j 2 也支持修改时自动重新加载其配置。

与 Logback 不同的是,它不会在重新配置发生时丢失日志事件。

高级过滤

与 Logback 一样,Log4j 2 支持基于 Log 事件中的上下文数据、标记、正则表达式和其他组件进行过滤。 在传递给记录器之前或通过附加器时,可以指定过滤以应用于所有事件。 此外,过滤器还可以与记录器相关联。 与 Logback 不同,您可以在任何这些情况下使用公共 Filter 类。

插件架构

Log4j 使用插件模式来配置组件。 因此,您无需编写代码来创建和配置 Appender、布局、模式转换器等。 Log4j 会自动识别插件并在配置引用它们时使用它们。

属性支持

您可以在配置中引用属性,Log4j 将直接替换它们,或者 Log4j 将它们传递给将动态解析它们的底层组件。 属性来自配置文件中定义的值、系统属性、环境变量、ThreadContext Map 和事件中存在的数据。 用户可以通过添加自己的查找插件来进一步自定义属性提供程序。

Java 8 Lambda 支持

以前,如果构建日志消息的成本很高,您通常会在构建消息之前明确检查请求的日志级别是否已启用。 在 Java 8 上运行的客户端代码可以从 Log4j 的 lambda 支持中受益。 由于如果未启用请求的日志级别,Log4j 将不会评估 lambda 表达式,因此可以用更少的代码实现相同的效果。

自定义日志级别

在 Log4j 2 中,可以在代码或配置中轻松定义自定义日志级别。 不需要子类化。

日志生成器 API

除了使用 Log4j API 中的众多日志方法之一,还可以使用构建器构建日志事件。 有关详细信息,请参阅 [日志生成器][manual/logbuilder.html]。

无垃圾

在稳态日志记录期间,Log4j 2 在独立应用程序中是无垃圾的,而在 Web 应用程序中则是低垃圾。 这减少了垃圾收集器的压力并且可以提供更好的响应时间性能。

与应用服务器集成

版本 2.10.0 添加了模块 log4j-appserver 以改进与 Apache Tomcat 和 Eclipse Jetty 的集成。

启用云

2.12.0 版本引入了对通过 Lookup 访问 Docker 容器信息以及通过 Spring Cloud Configuration 访问和更新 Log4j 配置的支持。 此支持在 2.13.0 版中得到增强,以添加对访问 Spring Boot 属性和 Kubernetes 信息的支持。 有关详细信息,请参阅登录云。

与 Log4j 1.x 兼容

Log4j 2 的 Log4j-1.2-api 模块为使用 Log4j 1 日志记录方法的应用程序提供兼容性。 从 Log4j 2.13.0 开始,Log4j 2 还提供对 Log4j 1.x 配置文件的实验性支持。 有关更多信息,请参阅 Log4j 2 与 Log4j 1 的兼容性。

文档

Log4j 2 用户指南可在此站点上获得或作为可下载的 PDF 获得。

要求

Log4j 2.13.0 及更高版本需要 Java 8。2.4 到 2.12.1 版本需要 Java 7(Log4j 团队不再支持 Java 7)。 某些功能需要可选的依赖项; 这些功能的文档将指定所需的依赖项。

消息

Log4j 2.17.1 已经发布到:

地址 CVE-2021-44832。 其他小错误修复。 2.17.1(对于 Java 8)是推荐的升级。

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

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

Log4j 2.17.1 保持与以前版本的二进制兼容性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-1.2.11.jar, log4j-1.2.12.jar, log4j-1.2.13-sources.jar, log4j-1.2.13.jar, log4j-1.2.13.src.jar, log4j-1.2.14-sources.jar, log4j-1.2.14.jar, log4j-1.2.15-sources.jar, log4j-1.2.15.jar, log4j-1.2.16-sources.jar, log4j-1.2.16.jar, log4j-1.2.5.jar, log4j-1.2.6.jar, log4j-1.2.7.jar, log4j-1.2.8.jar, log4j-1.2.9.jar, log4j-1.2.91.jar, log4j-1.2.jar, log4j-1.2rc1.jar, log4j-1.3alpha-7.jar, log4j-api-2.0.2-javadoc.jar, log4j-api-2.0.2-sources.jar, log4j-api-2.0.2.jar, log4j-boot.jar, log4j-bridge-0.9-sources.jar, log4j-bridge-0.9-tests.jar, log4j-bridge-0.9.4-sources.jar, log4j-bridge-0.9.4-tests.jar, log4j-bridge-0.9.4.jar, log4j-bridge-0.9.6-sources.jar, log4j-bridge-0.9.6-tests.jar, log4j-bridge-0.9.6.jar, log4j-bridge-0.9.jar, log4j-config.jar, log4j-core-2.0.2-javadoc.jar, log4j-core-2.0.2-sources.jar, log4j-core-2.0.2-tests.jar, log4j-core-2.0.2.jar, log4j-core.jar, log4j-ext.jar, log4j-flume-ng-2.0.2-javadoc.jar, log4j-flume-ng-2.0.2-sources.jar, log4j-flume-ng-2.0.2.jar, log4j-java1.1.jar, log4j-jcl-2.0.2-javadoc.jar, log4j-jcl-2.0.2-sources.jar, log4j-jcl-2.0.2.jar, log4j-jmx-gui-2.0.2-javadoc.jar, log4j-jmx-gui-2.0.2-sources.jar, log4j-jmx-gui-2.0.2.jar, log4j-nosql-2.0.2-javadoc.jar, log4j-nosql-2.0.2-sources.jar, log4j-nosql-2.0.2.jar, log4j-over-slf4j-1.5.0.jar, log4j-over-slf4j-1.5.10.jar, log4j-over-slf4j-1.5.3.jar, log4j-over-slf4j-1.5.5.jar, log4j-over-slf4j-1.5.6-sources.jar, log4j-over-slf4j-1.5.6.jar, log4j-over-slf4j-1.5.8-sources.jar, log4j-over-slf4j-1.5.8.jar, log4j-over-slf4j-1.6.1.jar, log4j-slf4j-impl-2.0.2-javadoc.jar, log4j-slf4j-impl-2.0.2-sources.jar, log4j-slf4j-impl-2.0.2.jar, log4j-snmp-appender.jar, log4j-taglib-2.0.2-javadoc.jar, log4j-taglib-2.0.2-sources.jar, log4j-taglib-2.0.2.jar, log4j-to-slf4j-2.0.2-javadoc.jar, log4j-to-slf4j-2.0.2-sources.jar, log4j-to-slf4j-2.0.2.jar, log4j-web-2.0.2-javadoc.jar, log4j-web-2.0.2-sources.jar, log4j-web-2.0.2.jar, log4j-wjw.jar, log4j-xml-1.3alpha-7.jar, log4j.jar, org.apache.log4j_1.2.15.v201005080500.jar, org.apache.log4j_1.2.15.v201012070815.jar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值