Cur*_*s89 2 slf4j apache-commons-logging log4j2 slf4j-api
想知道我应该包含的依赖项,以将 commons-logging 桥接到 slf4j-api。
通过添加以下内容,我的构建成功:
"org.apache.logging.log4j:log4j-api:2.12.1"
"org.apache.logging.log4j:log4j-core:2.12.1"
"org.apache.logging.log4j:log4j-1.2-api:2.12.1"
"org.slf4j:slf4j-api:${slf4j_version}"
"org.apache.logging.log4j:log4j-slf4j-impl:2.12.1"
"org.slf4j:slf4j-jcl:1.7.25"
Run Code Online (Sandbox Code Playgroud)
但无法启动我的服务:( Getting java.lang.ExceptionInInitializerError... 引起:org.springframework.beans.factory.CannotLoadBeanClassException
您需要在此处执行几个步骤。首先,您应该包含该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>
Run Code Online (Sandbox Code Playgroud)
如果在运行时包含此 JAR,则应使用 Jakarta commons logging 接收来自任何东西的所有日志记录调用,然后将其重新路由到您的 SLF4J 外观(您可以使用任何您想要的实现进行记录)。
但是,理想情况下,您还应该采取一个额外的步骤。您应该在 Maven POM 中更改commons-loggingto的依赖范围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>
Run Code Online (Sandbox Code Playgroud)
通过commons-logging提供,您告诉 Maven 在构建期间为需要它的代码中的任何组件(例如 Spring 之类的东西)包含它,但在运行时将它排除在最终 JAR 输出中。相反,jcl-over-slf4j.jar上面提到的桥 JAR将在运行时存在。例如,Spring 仍然会在运行时调用 Jakarta 日志记录,但这实际上只是被输入到 SLF4J 外观中,最终得到您提供的任何日志记录实现。
检查slf4j 文档,其中讨论了上面提到的一些事情。
旁注:您可能希望mvn dependency:tree在您的项目上运行以验证您的 Maven 库配置是否正确。你应该不会看到比你选择与SLF4J使用之外的任何其他日志实现。特别是,commons-logging应该只显示为provided,即它不应该出现在 JAR 的类路径中。
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |