想知道我应该包括哪些依赖项来连接公用日志到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"但无法启动我的服务:(获取java.lang.ExceptionInInitializerError.由: org.springframework.beans.factory.CannotLoadBeanClassException引起
发布于 2019-09-11 04:59:51
你需要在这里采取一些步骤。首先,您应该包括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,则应该使用接收所有日志记录调用,然后将其重新路由到您的SLF4J外观(您可以使用您想要的任何实现进行日志记录)。
但是,有一个额外的步骤,你应该采取理想的做法。您应该在Maven POM中将commons-logging的依赖范围更改为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输出中。相反,上面提到的桥JAR jcl-over-slf4j.jar将在运行时出现。例如,Spring仍将在运行时调用Jakarta,但这实际上将被输入到SLF4J外观中,从而最终得到您所提供的任何日志记录实现。
查看slf4j文档,它讨论了上面提到的一些事情。
附带注意:您可能希望在项目上运行mvn dependency:tree,以验证您的Maven库配置是否正确。除了选择在SLF4J中使用的实现之外,您不应该看到任何其他日志记录实现。特别是,commons-logging应该只显示为provided,也就是说它不应该出现在您的JAR类路径上。
https://stackoverflow.com/questions/57882301
复制相似问题