SLF4J: Der Klassenpfad enthält mehrere SLF4J-Bindungen

206

Ich erhalte den folgenden Fehler. Es scheint, dass mehrere Protokollierungsframeworks an sl4j gebunden sind. Ich bin mir nicht sicher, wie ich das beheben soll. Jede Hilfe wird sehr geschätzt.

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.
user1493140
quelle
15
Gelöst Verwendung <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> in den dependecies (von pom.xml) , die verursacht Konflikt half lösen das Problem
user1493140
6
Haben Sie bereits slf4j.org/codes.html#multiple_bindings überprüft, wie in der Warnung angegeben?
Peter Keller
7
Vielleicht könnte es besser sein, eine Antwort (automatische Antwort) zu dieser Frage hinzuzufügen und sie als "Akzeptiert" zu markieren. Daher wird die Frage in den SO-Suchen als "Gelöst" angezeigt
Roberto
1
Roberto, Danke für das Feedback. Ich habe die Lösung aus dem Kommentar kopiert und als Antwort gepostet.
user1493140

Antworten:

125

Behebung durch Hinzufügen des folgenden Ausschlusses in den Abhängigkeiten (von pom.xml), die zu Konflikten geführt haben.

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions> 
user1493140
quelle
10
Welche Abhängigkeit Konflikt in diesem Fall verursacht hat, ich habe Abhängigkeitsbaum Es gibt 3 Erwähnungen von slf4j
PUG
22
Um herauszufinden, wie log4j auf Ihren Pfad gelangt, führen Sie mvn dependency: tree aus und kämmen Sie es durch. Fügen Sie dann das obige Snippet zu dieser Abhängigkeit in Ihrer pom.xml hinzu
cyber-monk
1
@ user1493140 Immer noch funktioniert es nicht für mich. <dependency> <groupId> log4j </ groupId> <artifactId> log4j </ifactId> <version> 1.2.17 </ version> <exclusions> <exclusion> <groupId> org.slf4j </ groupId> <artifactId> slf4j- log4j12 </ Artefakt-ID> </ Ausschluss> </ Ausschlüsse> </ Abhängigkeit>
Ashok Kumar Ganesan
1
Für mich war ein weiterer Krug die Ursache. Ich musste die Artefakte mit den IDs slf4j-nop und slf4j-jdk14 ausschließen. Die Abhängigkeit, die den Konflikt für mich verursachte, war Clover-Maven-Plugin
Ihebiheb
ist die version ( slf4j-log4j12) für alle anwendbar? oder sollten wir die version aus mvn dependency: tree herausfinden ?
Lei Yang
59

Gradle-Version;

configurations.all {
    exclude module: 'slf4j-log4j12'
}
Kerem
quelle
2
Importieren von Modellen aus der Hauptanwendung in das Automatisierungsframework. Dies löste mein Problem mit gradle. ty.
Wird
1
Gibt es eine Ameisenversion dafür?
Balaji Boggaram Ramanarayan
1
no: ant ist kein abhängigkeitsbewusstes Tool. Ziehen Sie nachdrücklich in Betracht, Ihren Build auf Gradle zu portieren.
Matthew Mark Miller
1
Ich empfehle dringend, Ihren Build auf sbt zu portieren :)
Ioleo
2
Ausgezeichnet. Rettete mich vor ein paar Stunden Abhängigkeitshölle!
Jseals
24

Der Fehler enthält wahrscheinlich weitere Informationen wie diese (obwohl Ihre Glasnamen unterschiedlich sein können).

SLF4J: Bindung in [jar: file: / D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar! / Org / slf4j / impl / StaticLoggerBinder gefunden .class] SLF4J: Bindung in [jar: file: / D: /Java/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar gefunden ! /org/slf4j/impl/StaticLoggerBinder.class]

Es wurde festgestellt, dass der Konflikt aus zwei Gläsern mit dem Namen logback-classic-1.2.3und stammt log4j-slf4j-impl-2.8.2.jar.

Führen Sie mvn dependency:treein diesem übergeordneten Projektordner pom.xml Folgendes aus:

Abhängigkeitsbaumkonflikt

Wählen Sie nun diejenige aus, die Sie ignorieren möchten (könnte ein heikles Unterfangen kosten, ich brauche mehr Hilfe dazu)

Ich habe mich entschieden, die aus spring-boot-starter-data-jpa(der obersten Abhängigkeit) importierte nicht durch spring-boot-starterund durch zu verwenden spring-boot-starter-logging, pom wird:

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

in oben pom spring-boot-starter-data-jpawürde die spring-boot-starterin der gleichen Datei konfigurierte verwenden, die ausschließt logging(es enthält logback)

Tiina
quelle
1
Vielen Dank für die Einführung mvn dependency:tree. Es ist so hilfreich ...
Jan Lochman
10

Sbt-Version:

exclude("org.slf4j", "slf4j-log4j12")An die Abhängigkeit anhängen , die transitiv eingeschlossen ist slf4j-log4j12. Wenn Sie beispielsweise Spark mit Log4j 2.6 verwenden:

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")
)
Ruud
quelle
1
Wofür steht Sbt?
Petrus Theron
3
Einfaches Build-Tool *
Benny
4
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

Ich löste durch Löschen dieses: spring-boot-Starter-log4j2

Gank
quelle
nicht klar: meinst du löschen / kommentieren über xml abschnitt oder hinzufügen?
Lei Yang
3

Ich habe diese JAR-Datei einfach ignoriert / entfernt.

Geben Sie hier die Bildbeschreibung ein

VK_217
quelle
3

Verwenden Sie einfach nur die erforderliche Abhängigkeit, nicht alle :))). Für mich muss diese Abhängigkeit für die normale Arbeit des Protokollierungsprozesses andere von pom.xml ausschließen

<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>
Musa
quelle
3

Dies ist ein Problem, da die StaticLoggerBinder.class-Klasse zu zwei verschiedenen Jars gehört. Diese Klasse verweist auf logback-classic-1.2.3.jar und dieselbe Klasse verweist auch auf log4j-slf4j-impl-2.10.0.jar. beide Glas im Klassenpfad. Daher besteht ein Konflikt zwischen ihnen. Dies ist der Grund dafür, dass die Protokolldatei nicht generiert wird, obwohl die Datei log4j2.xml im Klassenpfad [src / main / resource] vorhanden ist.

Wir haben eine der Optionen jar ausgewählt. Ich empfehle, die Datei log4j-slf4j-impl-2.10.0.jar zu verwenden und die Datei logback-classic-1.2.3.jar auszuschließen. Lösung: Öffnen Sie die POM-Datei und zeigen Sie die Abhängigkeitshierarchie [Eclipse] an, oder führen Sie den
Befehl mvn dependency: tree aus, um den Abhängigkeitsbaum und die Quelle der Abhängigkeit zu ermitteln, die die Abhängigkeit herunterladen. Finden Sie die widersprüchliche Abhängigkeit und schließen Sie sie aus. Versuchen Sie dies für die Springboot-Anwendung.

<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.
Rajeev Rathor
quelle
2

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

## Ich habe das behoben

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

Pradeep Charan Jadi
quelle
2

Für mich stellte sich heraus, dass es sich nach dem Wechsel von log4j zu logback um ein Eclipse / Maven-Problem handelte. Schauen Sie in Ihre .classpathDatei und suchen Sie nach der Zeichenfolge "log4j".

In meinem Fall hatte ich dort folgendes: <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" />

Das Entfernen dieser Einträge aus der Datei (oder Sie können sie neu generieren) hat das Problem behoben.

helmy
quelle
2

Für mich war die Antwort, einen Maven-Wiederaufbau zu erzwingen. In Eclipse:

  1. Klicken Sie mit der rechten Maustaste auf Projekt-> Maven -> Maven-Natur deaktivieren
  2. Klicken Sie mit der rechten Maustaste auf Projekt-> Spring Tools> Maven-Abhängigkeiten aktualisieren
  3. Klicken Sie mit der rechten Maustaste auf Projekt-> Konfigurieren> Maven-Projekt konvertieren
DS.
quelle
0

Ich hatte das gleiche Problem. In meiner pom.xml hatte ich beides

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

Als ich die Spring-Boot-Starter-Web-Abhängigkeit löschte, war das Problem gelöst.

Anna Gaitanidi
quelle
-1

Die Kombination von <scope>provided</scope>und <exclusions>hat bei mir nicht funktioniert.

Ich musste das benutzen:

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

Wo empty.jarist eine JAR-Datei mit buchstäblich nichts drin?

Alex R.
quelle
-5

Scheint das .m2-Verzeichnis zu entfernen und:

mvn install -DskipTests -T 4 Dieses Problem wurde für mich behoben.

Bhavin Brahmkshatriya
quelle