您需要在此处执行几个步骤。首先,您应该包含该jcl-over-slf4j.jar
文件,例如:
<!-- https://mvnrepository.com/artifact/org.slf4j/jcl-over-slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.28</version>
</dependency>
这个 JAR,如果在运行时包含,应该接收来自任何使用 Jakarta 公共日志记录的所有日志记录调用,然后将其重新路由到您的 SLF4J 外观(您可以使用您想要的任何实现从该外观进行日志记录)。
但是,理想情况下,您还应该采取额外的步骤。您应该在 Maven POM 中更改commons-logging
to的依赖范围:provided
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>[1.0,)</version> <!-- include all possible versions -->
<scope>provided</scope> <!-- IMPORTANT -->
</dependency>
通过commons-logging
提供,您告诉 Maven 在构建时将它包含在代码中需要它的任何组件(例如 Spring 之类的东西)中,但在运行时将其排除在最终 JAR 输出中。相反,jcl-over-slf4j.jar
上面提到的桥接 JAR 将在运行时存在。例如,Spring 仍然会在运行时调用 Jakarta 日志记录,但这实际上只是被输入到 SLF4J 外观中,最终得到您提供的任何日志记录实现。
查看slf4j 文档,其中讨论了上面提到的一些事情。
旁注:您可能希望mvn dependency:tree
在您的项目上运行以验证您的 Maven 库配置是否正确。除了您选择与 SLF4J 一起使用的实现之外,您不应该看到任何其他日志记录实现。特别是,commons-logging
应该只显示为provided
,即它不应该在您的 JAR 的类路径中。