SLF4J:クラスパスに複数のSLF4Jバインディングが含まれています
次のようなエラーが出ます。 sl4jにバインドされた複数のロギングフレームワークがあるようです。これを解決する方法がわからない。任意の助けは大歓迎です。
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
競合を引き起こした(pom.xmlの)依存関係に次の除外を追加することで解決しました。
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
Gradleのバージョン
configurations.all {
exclude module: 'slf4j-log4j12'
}
エラーはおそらくもっとこのような情報を与えます(あなたのjar名は異なるかもしれませんが)
SLF4J:[jar:file:/ D:/Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/ org/slf4j/impl/StaticLoggerBinder]にバインディングが見つかりましたSLF4J:[jar:file:/ D:/Java/repository/org/Apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar]にバインディングが見つかりました。 !/org/slf4j/impl/StaticLoggerBinder.class]
競合はlogback-classic-1.2.3
とlog4j-slf4j-impl-2.8.2.jar
という2つのjarファイルから発生していることがわかりました。
このプロジェクトのpom.xml親フォルダーでmvn dependency:tree
を実行します。
今、あなたが無視したいものを選択してください(私はこれについてより多くの助けを必要とする繊細な努力を消費する可能性があります)
spring-boot-starter-data-jpa
(spring-boot-starter
)およびspring-boot-starter-logging
からインポートされたものを使用しないことにしました。pomは次のようになります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
上記のpomでは、spring-boot-starter-data-jpa
は同じファイルで設定されたspring-boot-starter
を使用します。これはlogging
を除外します(logback
を含みます)。
SBTバージョン:
slf4j-log4j12
を推移的に含む依存関係にexclude("org.slf4j", "slf4j-log4j12")
を追加します。たとえば、Log4j 2.6でSparkを使用すると、次のようになります。
libraryDependencies ++= Seq(
// One SLF4J implementation (log4j-slf4j-impl) is here:
"org.Apache.logging.log4j" % "log4j-api" % "2.6.1",
"org.Apache.logging.log4j" % "log4j-core" % "2.6.1",
"org.Apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1",
// The other implementation (slf4j-log4j12) would be transitively
// included by Spark. Prevent that with exclude().
"org.Apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12")
)
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->
私はこれを削除して解決しました:spring-boot-starter-log4j2
必要な依存関係のみを使用し、すべてではありません:)))。私にとっては、ログ記録プロセスの通常の仕事のためには、この依存関係が必要ですpom.xmlから他の人を除外
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.8</version>
</dependency>
... org.codehaus.mojo cobertura-maven-plugin 2.7テストch.qos.logback logback-classic tools com.Sun ...
##これで直しました
... org.codehaus.mojo cobertura-maven-plugin 2.7テストch.qos.logback logback-classic tools com.Sun ...
これは、StaticLoggerBinder.classクラスが2つの異なるjarに属しているために発生します。このクラスはlogback-classic-1.2.3.jarから参照し、同じクラスはlog4j-slf4j-impl-2.10.0.jarからも参照しています。クラスパス内のjarの両方。それ故にそれらの間に対立がある。これは、クラスパス内のlog4j2.xmlファイル[src/main/resource]にもかかわらず、ログファイルが生成されない理由です。
私たちはjarの一つを選択したので、私はlog4j-slf4j-impl-2.10.0.jarファイルを使用してlogback-classic-1.2.3.jarファイルを除外することを推奨します。解決方法:pomファイルを開いて依存性階層[Eclipse]を表示するか、実行してください。
mvn dependency:依存関係をダウンロードする依存関係ツリーと依存関係のソースを見つけるためのtreeコマンド。矛盾する依存関係を見つけてそれらを除外します。 Springbootアプリケーションの場合はこれを試してください。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
This is working fine for me after struggling a lots.
私にとっては、log4jからlogbackに切り替えた後のEclipse/Mavenの問題であることがわかりました。 .classpath
ファイルを調べて、ストリング"log4j"
を検索してください。
私の場合は、次のようにしました。<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.7.1/slf4j-log4j12-1.7.1.jar"/> <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" />
ファイルからそれらのエントリを削除すると(または再生成することができます)、問題は解決しました。
私にとって答えはMavenの再構築を強制することでした。 Eclipseでは:
- Project-> Maven - > Disable Maven natureを右クリックします。
- プロジェクト - > Spring Tools> Update Maven Dependenciesを右クリックします。
- Project-> Configure> Convert Maven Projectを右クリックします。