过渡到全新 Log4j:Log4j 项目管理委员会访谈

  • Abraham Marín Pérez
  • 金灵杰

2015 年 9 月 13 日

话题:JavaApache语言 & 开发架构

正如最近在 InfoQ 上发布的,Apache 软件基金会宣布Log4j 版本 1 生命周期终结,鼓励用户升级到流行的日志框架:Log4j 版本 2。

InfoQ 和Apache 日志服务团队的成员接触,试图找到更多关于新版本 Log4j 的过渡和它的特性。他们是 Apache 日志项目管理委员会成员、Log4j 2 最初发起者Ralph Goers,Apache 日志项目管理委员会成员 Remko Popma 和 Gary Gregory,Apache 日志项目管理委员会主席 Christian Grobmeier。

InfoQ:尽管Lo4j2发布刚过了一年,根据maven中央仓库的统计,版本1仍然比版本2更加受欢迎。你们认为生命周期终结会促使用户迁移到新版本吗?

Remko:我希望生命周期终结至少会提高人们对 Log4j2 存在的认识。我非常理解有的时候没有动机来改变这种没有引起任何问题的东西,但是我也希望生命周期终结将会激励用户至少在新项目中使用 Log4j2。

Christian:生命周期终结也许只是一个标签,但是我们都知道之后将不太可能有人会投入大量时间去发布 Log4j1 的新版本了。它的构建是相当恐怖的复杂。正因为不在会有新的发布,这也可能导致一些安全问题。事实上我们有完备的 Log4j1 缺陷跟踪系统,用户仍然可以自由的报告问题,但是除非他们同时提交补丁,否则我们将不在修复。这表示,如果只出于安全方面原因,用户也应该考虑升级。

InfoQ:现在看起来重写Log4j新版本的主要原因是为了克服版本1中架构上种种挑战。然而,仍然有很多只有简答日志记录需求的用户,可能不需要现在正在开发的新特性,你们会怎样告诉这些用户,说服他们迁移到版本2上?

Remko:“简单的日志记录需求”一般表示“我们很忙,没有空去分析我们的未来的日志记录需求,或者花时间比较各种可选框架”。完全可以理解。我想说的是,Log4j2 是一个完美的选择:它易于使用,令人惊叫的快,并且在功能和灵活性上有难以置信的深度,可以适应未来增长的需求。

Ralph:虽然我们推荐用户升级到 Log4j2,但是如果他们愿意,他们仍然能够自由的使用 Log4j1。然而,用户应该知道,虽然他们能够继续报告在使用 Log4j1 时遇到的问题,但是这些问题只有在用户提供补丁或者寻找其他愿意修复人之后才有可能被修复。

Gary:有一点有目共睹的是,对我们(开发者)非所有(用户)来说,我们都是志愿者,这表示我们只有有限的时间和资源,因此,我们需要决定什么是奉献这些资源最有效的方式。在 Log4j1 上进行更改太困难,将同样的努力聚焦到版本 2 上,我们可以获得更多的价值。

另外,生命周期终结只是说说而已。如果开发者愿意,可能会有新的版本发布。但是一些问题可能只有在新的架构和版本中才能被方便的定位。

InfoQ:由于不得不停止使用Log4j版本1,一些开发者可能会考虑移植到不同的日志框架,而不是简单的升级到版本2,这会是一个顾虑吗?

Remko:我强烈感觉到 Log4j2 对于其他可选框架是有竞争力的。这里有一些 Log4j2 的特性,我可以用来突出证明:

  • 社区支持:Log4j2 有活跃的社区,在这里有问题的回答,特性的增加和缺陷的修复。
  • 超低的性能影响:异步日志记录器( Asynchronous Loggers)提供性能类似于日志记录完全关闭的水平
  • 稳定性 / 可靠性:自动加载修改后的配置,并且在重新配置时不会丢失日志事件。
  • 有丰富的功能集,包括自定义日志级别,过滤(基于上下文数据、标记、正则表达式和日志事件中的其他组件)和查找
  • 可插拔架构:通过构建自定义组件,可以方便的扩展。
  • 支持的 API:Log4j2 可以被直接使用,或者通过 SLF4J、Commons Logging、Log4j1 和 java.util.logging 日志接口间接使用。
  • 即将发布的 2.4 版本会支持 Java 8 的 lambda 表达式。

InfoQ:你们认为Log4j版本1生命周期终结的时机是对的吗?如果你们可以改变,你们会将这个时间点提前、延后还是保持不变?

Remko:我认识它是正确的。Log4j2 迄今已经有 19 次发布了,最后 6 次被标记为正式发布版本(General Availability)。从第一个 GA(General Availability)版本发布以来,已经有超过一年的时间,Log4j2 已经被证明是非常稳定的。这使得我们认为 Log4j2 是 Log4j1 安全的替代品,因此这是一个非常好的实际来声明上一个版本的终结。

Ralph:我们对于生命周期终结的声明,只是对近几年来已经没有人在位 Log4j1 修复缺陷的这个事实承认。在某种程度上说,版本 1 的生命周期已经终结了很久了。我们只是需要确保在 Log4j1 正式退休前,Log4j2 已经是稳定、可靠的替换版本。

InfoQ:你们认为日志记录领域最大的挑战将会是什么?针对Log4j的又会是什么?

Remko:就个人而言,我将继续提升 Log4j2 的性能,尤其是在同步日志记录场景下。我认为在这个领域仍然有很多提升的可能。一个更大的挑战或许是日志管理:收集、集中化聚合、长期保留、日志分析、日志搜索和报告。已经有产品尝试解决这些问题,或许如果有标准出现,Log4j 可以做一些工作,让这些任务更加容易。

Apache 软件基金会为希望从版本 1 升级到版本 2 的用户创建了一份迁移指南,同时提供了建议采用的Log4j2 特性摘要

查看英文原文:The Transition to a New Log4j: a Q&A with Log4j’s Project Management Committee


感谢张龙对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

JavaApache语言 & 开发架构