欢迎使用 Log4j 2!

介绍

几乎每个大型应用程序都包含自己的日志记录或跟踪 API。根据此规则,欧盟 SEMPER 项目决定编写自己的跟踪 API。这发生在 1996 年初。经过无数次增强、几次迭代和大量工作,该 API 发展成为 log4j,一个流行的 Java 日志记录包。该包在 Apache 软件许可证 下分发,该许可证是 开源 倡议认证的成熟的开源许可证。最新的 log4j 版本,包括完整的源代码、类文件和文档,可以在 https://logging.apache.org/log4j/2.x/index.html 找到。

在代码中插入日志语句是一种调试代码的低技术方法。它也可能是唯一的方法,因为调试器并不总是可用或适用。这通常是多线程应用程序和大型分布式应用程序的情况。

经验表明,日志记录是开发周期中的一个重要组成部分。它提供了几个优势。它提供了有关应用程序运行的精确上下文。一旦插入代码,生成日志输出不需要人工干预。此外,日志输出可以保存在持久介质中,以便在以后进行研究。除了在开发周期中的使用之外,一个足够丰富的日志记录包也可以被视为一种审计工具。

正如 Brian W. Kernighan 和 Rob Pike 在他们真正优秀的著作“编程实践”中所说:

作为个人选择,我们倾向于不使用调试器,除了获取堆栈跟踪或一两个变量的值。其中一个原因是,很容易迷失在复杂数据结构和控制流的细节中;我们发现逐步执行程序不如多加思考并在关键位置添加输出语句和自检代码更有成效。单击语句比扫描明智放置的显示的输出花费的时间更长。决定在哪里放置打印语句比单步执行到代码的关键部分花费的时间更少,即使假设我们知道在哪里。更重要的是,调试语句会保留在程序中;调试会话是短暂的。

日志记录确实有其缺点。它会减慢应用程序的速度。如果过于冗长,它会导致滚动失明。为了缓解这些问题,log4j 被设计为可靠、快速且可扩展的。由于日志记录很少是应用程序的主要重点,因此 log4j API 力求易于理解和使用。

Log4j 2

Log4j 1.x 已被广泛采用并在各种应用程序中使用。它在 2012 年发布了最终版本,并在 2015 年 8 月宣布 Log4j 1.x 已达到 寿命结束

那么,是什么让升级到 Log4j 2 成为一个明智的决定呢?以下是一些令人信服的原因。

  1. 审计日志记录:Log4j 2 被设计为可作为审计日志记录框架使用。Log4j 1.x 和 Logback 都会在重新配置时丢失事件。Log4j 2 不会。在 Logback 中,追加器中的异常对应用程序不可见。在 Log4j 2 中,追加器可以配置为允许异常渗透到应用程序。
  2. 异步记录器:Log4j 2 包含基于 LMAX Disruptor 库 的下一代 异步记录器。在多线程场景中,异步记录器的吞吐量比 Log4j 1.x 和 Logback 高 10 倍,延迟低几个数量级。
  3. 无垃圾:Log4j 2 对于独立应用程序是 无垃圾的,而对于 Web 应用程序,在稳定状态日志记录期间垃圾很少。这减少了对垃圾收集器的压力,并可以提供更好的响应时间性能。
  4. 插件:Log4j 2 使用 插件系统,这使得通过添加新的 追加器过滤器布局查找 和模式转换器来 扩展框架 变得非常容易,而无需对 Log4j 进行任何更改。
  5. 简单配置:由于插件系统,配置更简单。配置中的条目不需要指定类名。
  6. 自定义日志级别:支持 自定义日志级别。自定义日志级别可以在代码或配置中定义。
  7. Lambda 表达式:支持 lambda 表达式。在 Java 8 上运行的客户端代码可以使用 lambda 表达式来延迟构建日志消息,只有在请求的日志级别已启用时才会构建。不需要显式级别检查,从而产生更简洁的代码。
  8. 消息:支持 消息对象。消息允许支持通过日志记录系统传递并有效地操作有趣且复杂的结构。用户可以自由创建自己的 Message 类型并编写自定义 布局过滤器查找 来操作它们。
  9. 过滤器:Log4j 1.x 支持追加器上的过滤器。Logback 添加了 TurboFilters,允许在处理记录器之前过滤事件。Log4j 2 支持过滤器,可以配置为在处理记录器之前处理事件,在处理记录器时处理事件,或在追加器上处理事件。
  10. 追加器布局:许多 Logback 追加器不接受布局,并且只会以固定格式发送数据。大多数 Log4j 2 追加器接受布局,允许以任何所需的格式传输数据。
  11. 高级布局:Log4j 1.x 和 Logback 中的布局返回一个字符串。这导致了 Logback 编码器 中讨论的问题。Log4j 2 采用更简单的方法,即 布局 始终返回一个字节数组。这具有以下优点:这意味着它们可以在几乎任何追加器中使用,而不仅仅是写入 OutputStream 的追加器。
  12. Syslog 支持:Syslog 追加器 支持 TCP 和 UDP,以及对 BSD syslog 和 RFC 5424 格式的支持。
  13. Java 并发:Log4j 2 利用 Java 5 并发支持,并在尽可能低的级别执行锁定。Log4j 1.x 存在已知的死锁问题。Logback 修复了其中许多问题,但许多 Logback 类仍然需要在相当高的级别进行同步。
  14. 社区:它是一个 Apache 软件基金会项目,遵循所有 ASF 项目使用的社区和支持模式。如果您想贡献或获得提交更改的权利,只需按照 贡献 中概述的路径进行操作。