SLF4J:クラスパスに複数のSLF4Jバインディングが含まれています


206

次のエラーが発生します。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.

15
解決済みの使い方 <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> 原因競合が問題を解決する助けたこと(のpom.xmlの)の依存性に
user1493140


6
警告に記載されているように、すでにslf4j.org/codes.html#multiple_bindingsを確認しましたか?
Peter Keller

7
たぶん、この質問に回答(自動回答)を追加して「受理」とマークする方がいいかもしれません。そのため、SO検索では質問は「解決済み」として表示されます
Roberto

1
ロベルト、フィードバックをありがとう。コメントからソリューションをコピーして、回答として投稿しました。
user1493140 14年

回答:


125

競合を引き起こした(pom.xmlの)依存関係に以下の除外を追加することで解決しました。

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions> 

10
この場合、どの依存関係が競合を引き起こしたか、依存関係ツリーがあります。slf4jについて3つの言及があります
PUG

22
log4jがどのようにパスを取得しているかを確認するには、mvn dependency:treeを実行し、くしを実行してから、上記のスニペットをpom.xmlのその依存関係に追加します
cyber-monk

1
@ user1493140それでも私のために働いていません。<dependency> <groupId> log4j </ groupId> <artifactId> log4j </ artifactId> <version> 1.2.17 </ version> <exclusions> <exclusion> <groupId> org.slf4j </ groupId> <artifactId> slf4j- log4j12 </ artifactId> </ exclusion> </ exclusions> </ dependency>
Ashok kumar Ganesan

1
私にとっては、別のジャー戦争が原因です。IDがslf4j-nopおよびslf4j-jdk14のアーティファクトを除外する必要がありました。私に衝突を引き起こした依存関係はクローバー
メイブン

バージョン(slf4j-log4j12)はすべてに適用できますか?または、mvn dependency:treeからバージョンを確認する必要がありますか?
Lei Yang、

59

Gradleバージョン。

configurations.all {
    exclude module: 'slf4j-log4j12'
}

2
メインアプリケーションから自動化フレームワークにモデルをインポートすると、gradleに関する問題が解決しました。ty。
ウィル

1
これを行うアリバージョンはありますか?
Balaji Boggaram Ramanarayan 2015年

1
no:antは依存関係を認識するツールではありません。ビルドをgradleに移植することを強く検討してください。
マシューマークミラー

1
ビルドをsbtに移植することを強くお勧めします:)
ioleo '28年

2
優れた。数時間の依存関係の地獄から私を救った!
jseals 2018年

24

エラーはおそらくこのような詳細情報を提供します(ただし、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にバインディングが見つかりました.class] 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およびという名前の2つのjarに起因することに注意してくださいlog4j-slf4j-impl-2.8.2.jar

mvn dependency:treeこのプロジェクトのpom.xml親フォルダーで実行すると、次のようになります。

依存関係ツリーの競合

ここで、無視したいものを選択します(これについてさらに助けが必要な繊細な努力を費やす可能性があります)

私はから輸入いずれかを使用しないことを決め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


1
紹介していただきありがとうございますmvn dependency:tree。それはとても役に立ちます...
Jan Lochman

10

SBTバージョン:

exclude("org.slf4j", "slf4j-log4j12")推移的に含まれる依存関係に追加します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")
)

1
Sbtは何の略ですか?
ペトルスセロン2018年

3
シンプルなビルドツール*
Benny

4
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

これを削除することで解決しました:sp​​ring-boot-starter-log4j2


明確ではありません:xmlセクションの上に削除/コメントするという意味ですか、それとも追加ですか?
Lei Yang、


3

すべてではなく、必要な依存関係のみを使用してください:)))。私にとって、ロギングプロセスの通常の作業では、この依存関係が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>

3

StaticLoggerBinder.classクラスが2つの異なるjarに属しているため、これは問題です。このクラスはlogback-classic-1.2.3.jarから参照し、同じクラスはlog4j-slf4j-impl-2.10.0.jarからも参照します。クラスパス内の両方のjar。したがって、それらの間には矛盾があります。これが、クラスパス[src / main / resource]にlog4j2.xmlファイルがあるにもかかわらず、ログファイルが生成されない理由です。

jarの1つを選択したので、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.

2

... org.codehaus.mojo cobertura-maven-plugin 2.7テストch.qos.logback logback-classicツールcom.sun ...

##これで修正しました

... org.codehaus.mojo cobertura-maven-plugin 2.7テストch.qos.logback logback-classicツールcom.sun ...


2

私にとっては、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" />

これらのエントリをファイルから削除すると(またはファイルを再生成できます)、問題が修正されました。


2

私にとっての答えは、Mavenの再構築を強制することでした。Eclipseの場合:

  1. プロジェクトを右クリック-> Maven-> Disable Maven Nature
  2. プロジェクトを右クリック-> Spring Tools> Update Maven Dependencies
  3. プロジェクトを右クリック->設定> Mavenプロジェクトを変換

0

私も同じ問題を抱えていました。私のpom.xmlには両方がありました

 <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.28</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

spring-boot-starter-web依存関係を削除すると、問題が解決しました。


-1

組み合わせ<scope>provided</scope><exclusions>私のために動作しませんでした。

私はこれを使わなければなりませんでした:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <scope>system</scope>
    <systemPath>${project.basedir}/empty.jar</systemPath>
</dependency>

empty.jar文字通り何も入っていないjarファイルはどこにありますか。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.