SLF4J: Jalur kelas berisi beberapa ikatan SLF4J


206

Saya mendapatkan kesalahan berikut. Tampaknya ada beberapa kerangka kerja logging yang terikat ke sl4j. Tidak yakin bagaimana mengatasinya. Setiap bantuan sangat dihargai.

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
Diselesaikan Menggunakan <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> di dependecies (dari pom.xml) yang menyebabkan konflik membantu menyelesaikan masalah
user1493140


6
Apakah Anda sudah memeriksa slf4j.org/codes.html#multiple_bindings seperti yang dinyatakan dalam peringatan?
Peter Keller

7
Mungkin bisa lebih baik untuk menambahkan jawaban (jawaban otomatis) untuk pertanyaan ini dan menandainya sebagai "Diterima", Jadi pertanyaannya akan muncul sebagai "Terpecahkan" dalam pencarian SO
Roberto

1
Roberto, Terima kasih atas umpan baliknya. Saya menyalin solusi dari komentar dan mempostingnya sebagai jawaban.
user1493140

Jawaban:


125

Diselesaikan dengan menambahkan pengecualian berikut dalam dependensi (dari pom.xml) yang menyebabkan konflik.

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

10
ketergantungan mana yang menyebabkan konflik dalam kasus ini, saya punya pohon ketergantungan ada 3 sebutkan slf4j
PUG

22
untuk mengetahui bagaimana log4j berjalan di jalur Anda, jalankan mvn dependensi: tree dan sisir, lalu tambahkan cuplikan di atas ke dependensi di pom.xml Anda
cyber-monk

1
@ user1493140 Tetap tidak berfungsi untuk saya. <dependensi> <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
bagi saya perang jar lain penyebabnya. Saya harus mengecualikan artefak dengan id slf4j-nop dan slf4j-jdk14. Ketergantungan yang menyebabkan konflik bagi saya adalah clover-maven-plugin
ihebiheb

apakah versi ( slf4j-log4j12) berlaku untuk semua? atau haruskah kita mencari tahu versi dari dependensi mvn: tree ?
Lei Yang

59

Versi gradle;

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

2
Mengimpor Model dari aplikasi utama ke kerangka otomatisasi .. ini menyelesaikan masalah saya dengan gradle. ty.
Will

1
Apakah ada versi semut yang melakukan ini?
Balaji Boggaram Ramanarayan

1
tidak: semut bukan alat yang sadar akan ketergantungan. Pertimbangkan untuk mem-porting build Anda ke gradle.
Matius Mark Miller

1
sangat merekomendasikan porting build Anda ke sbt :)
ioleo

2
Luar biasa. Selamatkan aku dari neraka ketergantungan selama beberapa jam!
jseals

24

Kesalahan mungkin memberikan lebih banyak informasi seperti ini (walaupun nama toples Anda bisa berbeda)

SLF4J: Ditemukan mengikat di [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: Ditemukan mengikat di [jar: file: / D: /Java/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2jar ! /org/slf4j/impl/StaticLoggerBinder.class]

Melihat bahwa konflik berasal dari dua toples, bernama logback-classic-1.2.3dan log4j-slf4j-impl-2.8.2.jar.

Jalankan mvn dependency:treedalam folder induk pom.xml proyek ini, memberikan:

konflik pohon ketergantungan

Sekarang pilih salah satu yang ingin Anda abaikan (bisa mengkonsumsi usaha yang sulit saya perlu bantuan lebih lanjut tentang ini)

Saya memutuskan untuk tidak menggunakan yang diimpor dari spring-boot-starter-data-jpa(ketergantungan teratas) melalui spring-boot-starterdan melalui spring-boot-starter-logging, pom menjadi:

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

di pom di atas spring-boot-starter-data-jpaakan menggunakan yang spring-boot-starterdikonfigurasi dalam file yang sama, yang tidak termasuk logging(mengandung logback)


1
Terima kasih telah memperkenalkan mvn dependency:tree. Ini sangat membantu ...
Jan Lochman

10

Versi sbt:

Menambah exclude("org.slf4j", "slf4j-log4j12")ketergantungan yang termasuk secara transitif slf4j-log4j12. Misalnya, saat menggunakan Spark dengan Log4j 2.6:

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
Apa artinya Sbt berdiri?
Petrus Theron

3
Simple Build Tool *
Benny

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

Saya dipecahkan dengan menghapus ini: spring-boot-starter-log4j2


tidak jelas: maksud Anda hapus / komentar di atas bagian xml, atau tambahkan?
Lei Yang

3

Saya hanya mengabaikan / menghapus file jar itu.

masukkan deskripsi gambar di sini


3

Cukup gunakan hanya ketergantungan yang diperlukan, tidak semua :))). Bagi saya, untuk pekerjaan normal proses logging, Anda perlu dependensi ini mengecualikan orang lain dari 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

Ini masalah karena kelas StaticLoggerBinder.class milik dua toples yang berbeda. referensi kelas ini dari logback-classic-1.2.3.jar dan kelas yang sama juga dirujuk dari log4j-slf4j-impl-2.10.0.jar. kedua jar di classpath. Karenanya ada konflik di antara mereka. Ini adalah alasan file log tidak dibuat walaupun file log4j2.xml di classpath [src / main / resource].

Kami telah memilih salah satu toples, saya sarankan menggunakan file log4j-slf4j-impl-2.10.0.jar dan mengecualikan file logback-classic-1.2.3.jar. Solusi: buka file pom dan lihat dependensi Hierarchy [eclipse] atau jalankan
mvn dependency: tree perintah untuk mengetahui pohon dependensi dan sumber dependensi yang mengunduh dependensi. menemukan ketergantungan yang saling bertentangan dan mengecualikan mereka. Untuk aplikasi Springboot coba ini.

<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 test ch.qos.logback logback-tools klasik com.sun ...

## Saya perbaiki dengan ini

... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-tools klasik com.sun ...


2

Bagi saya, itu ternyata menjadi masalah Eclipse / Maven setelah beralih dari log4j ke logback. Lihatlah .classpathfile Anda dan cari string "log4j".

Dalam kasus saya, saya memiliki yang berikut: <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" />

Menghapus entri-entri itu dari file (atau Anda bisa membuatnya kembali) memperbaiki masalah.


2

Bagi saya jawabannya adalah memaksa Maven membangun kembali. Dalam Eclipse:

  1. Klik kanan pada project-> Maven -> Nonaktifkan sifat Maven
  2. Klik kanan pada project-> Spring Tools> Perbarui Maven Dependencies
  3. Klik kanan pada project-> Configure> Convert Maven Project

0

Saya memiliki masalah yang sama. Dalam pom.xml saya, saya memiliki keduanya

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

Ketika saya menghapus dependensi spring-boot-starter-web, masalah terpecahkan.


-1

Kombinasi <scope>provided</scope>dan <exclusions>tidak berhasil untuk saya.

Saya harus menggunakan ini:

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

Di mana empty.jarfile jar dengan benar-benar tidak ada di dalamnya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.