web-dev-qa-db-ja.com

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.
182
user1493140

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

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

Gradleのバージョン

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

エラーはおそらくもっとこのような情報を与えます(あなたの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.3log4j-slf4j-impl-2.8.2.jarという2つのjarファイルから発生していることがわかりました。

このプロジェクトのpom.xml親フォルダーでmvn dependency:treeを実行します。

dependency tree conflict

今、あなたが無視したいものを選択してください(私はこれについてより多くの助けを必要とする繊細な努力を消費する可能性があります)

spring-boot-starter-data-jpaspring-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を含みます)。

15
Tiina

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")
)
8
Ruud
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

私はこれを削除して解決しました:sp​​ring-boot-starter-log4j2

3
Gank

必要な依存関係のみを使用し、すべてではありません:)))。私にとっては、ログ記録プロセスの通常の仕事のためには、この依存関係が必要です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>
1
Musa

... 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 ...

1

そのjarファイルを無視するか削除しただけです。

enter image description here

1
VK_217

これは、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.
0
Rajeev Rathor

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

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

0
helmy

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

  1. Project-> Maven - > Disable Maven natureを右クリックします。
  2. プロジェクト - > Spring Tools> Update Maven Dependenciesを右クリックします。
  3. Project-> Configure> Convert Maven Projectを右クリックします。
0
DS.