升级到 Apache Commons Logging 1.3.0

将应用程序升级到 Apache Commons Logging 1.3.0 的说明。

Apache Commons Logging

Apache Commons Logging (JCL) 是最古老的 Java 日志记录 API 之一。它于 2002 年首次发布,立即在 Java 社区中得到广泛采用。

虽然随着时间的推移出现了更新的 API,例如 SLF4J 和我们自己的 Log4j API,但即使在 2023 年,也很难找到不依赖 JCL 的应用程序堆栈。根据 Sonatype 的数据,Apache Commons Logging 被用于 超过 100 万个工件,而第二名是 SLF4J,拥有 近 4 万个工件

1.3.0 版

在自上一个版本(1.2 版于 2014 年 7 月发布)发布 9 年多之后,Apache Commons Logging 今天发布了新的 1.3.0 版(参见 公告)。在最显著的变化中,新版本

  • 将日志记录转发到 Log4j API(如果存在),
  • 还支持转发到 SLF4J,
  • 添加了对 Java 平台模块系统 (JPMS) 的支持,模块名称为 org.apache.commons.logging

升级说明(Log4j Core/Logback)

Log4j Core 和 Logback 日志记录后端用户的升级路径很简单。第一步是升级 commons-logging。在 Maven 中,可以使用依赖项管理来完成此操作。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>

第二步是删除过时的依赖项。由于 1.2 版仅默认支持旧一代日志记录后端(Log4j 1.xAvalonLumberjack),Java 社区开发了许多 LogFactory 实现和完整的 Apache Commons Logging 替代品

这些工件可以从您的依赖项堆栈中安全地删除。对于 JPMS 用户,此操作甚至必需

为此,Maven 用户可以使用排除项

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jcl</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jcl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

并为了防止回归,将这些依赖项添加到 bannedDependencies Maven Enforcer 规则 中。

升级说明(Log4j 1.x/Reload4j 用户)

对于使用 Log4j 1.x 或 Reload4j 作为日志记录后端的用户,升级更加复杂:1.3.0 版默认情况下禁用了 Log4j 1.x 后端。

Log4j 1.x/Reload4j 用户

  • 鼓励迁移到 Log4j 2.x Core(参见 迁移指南)或 Logback,
  • 如果这不可行(或需要过渡期),他们需要将一个 commons-logging.properties 文件添加到他们的应用程序中,其中包含
org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger

JPMS 用户

org.apache.commons.logging JPMS 模块对 Log4j API 具有可选依赖项。为了让 JVM 自动将 org.apache.logging.log4j 模块添加到您的应用程序的运行时,您需要添加

requires org.apache.logging.log4j;

到您的应用程序的模块描述符中。