SLF4J警告:类路径包含多个SLF4J绑定

时间:2020-02-23 14:34:13  来源:igfitidea点击:

在本教程中,将看到 F4J Warning: Class-Path Contains Multiple SLF4J Bindings.

了解警告

让我们先了解警告内容。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/apple/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/apple/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.13.1/log4j-slf4j-impl-2.13.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

它简单地说类路径包含多个SLF4J绑定: logback-classic-1.2.3.jarlog4j-slf4j-impl-2.13.1.jar

要了解警告,我们需要了解 SLF4J

Simple Logging Facade for Java (SLF4J)为各种日志记录框架提供简单的抽象或者外观,如log4j,logback和java.util.logging等,并且它允许最终用户在部署时插入所需的日志记录框架。

SLF4J在ClassPath上查找绑定到插件日志记录框架。
如果类路径上存在多个绑定,则会发出警告。

请注意,这只是一个警告,而不是一个错误,它将选择一个绑定并继续进行。

例如: SLF4J选择了 logback在上面的警告中。
你可以看看这条线。

SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

如何解析SLF4J警告:Class-Path包含多个SLF4J绑定?

我们需要找到一个冲突的罐子来找到警告的根本原因。

我们可以使用以下命令跟踪冲突jar。

mvn dependency:tree
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.2.2.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.2.2.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:2.2.2.RELEASE:compile
[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] \- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.13.1:compile

如我们所见,我们这里有两个SLF4J绑定。

  • Ch.QoS.Logback:Logback-Classic:Jar
  • org.apache.logging.log4j:log4j-slf4j-iclich:jar logback-classic是传递依赖性,提出 spring-boot-starter-web
    我们已明确添加 log4j-slf4j-impl在我们的项目中使用log4j。

为避免此警告,我们需要排除不需要的依赖项 pom.xml
在这个例子中,我排除了 logback-classic

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>ch.qos.logback</groupId>
					<artifactId>logback-classic</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-to-slf4j</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

更新Maven项目并运行应用程序。
现在就不会再报 SLF4J Warning: Class Path Contains Multiple SLF4J Bindings