SLF4J: le chemin de classe contient plusieurs liaisons SLF4J

206

J'obtiens l'erreur suivante. Il semble qu'il existe plusieurs cadres de journalisation liés à sl4j. Je ne sais pas comment résoudre ce problème. Toute aide est grandement appréciée.

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
la source
15
Résolu L' utilisation <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> dans les dépendances (de pom.xml) qui a provoqué un conflit a aidé à résoudre le problème
user1493140
6
Avez-vous déjà vérifié slf4j.org/codes.html#multiple_bindings comme indiqué dans l'avertissement?
Peter Keller
7
Peut-être qu'il pourrait être préférable d'ajouter une réponse (réponse automatique) à cette question et la marquer comme « Accepté », la question apparaîtra comme « Résolu » dans le SO searchs
Roberto
1
Roberto, merci pour vos commentaires. J'ai copié la solution du commentaire et l'ai postée comme réponse.
user1493140

Réponses:

125

Résolu en ajoutant l'exclusion suivante dans les dépendances (de pom.xml) à l'origine du conflit.

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions> 
user1493140
la source
10
quelle dépendance a provoqué un conflit dans ce cas, j'ai un arbre de dépendance il y a 3 mentions de slf4j
PUG
22
pour savoir comment log4j progresse sur votre chemin, exécutez la dépendance mvn: arborescence et peigne, puis ajoutez l'extrait ci-dessus à cette dépendance dans votre pom.xml
cyber-moine
1
@ user1493140 Cela ne fonctionne toujours pas pour moi. <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
pour moi un autre pot de guerre la cause. J'ai dû exclure les artefacts avec l'ID slf4j-nop et slf4j-jdk14. La dépendance qui a provoqué le conflit pour moi était clover-maven-plugin
ihebiheb
la version ( slf4j-log4j12) est-elle applicable à tous? ou devrions-nous trouver la version de la dépendance mvn: arbre ?
Lei Yang
59

Version Gradle;

configurations.all {
    exclude module: 'slf4j-log4j12'
}
Kerem
la source
2
Importer des modèles de l'application principale dans le cadre d'automatisation .. cela a résolu mon problème avec gradle. ty.
Le
1
Y a-t-il une version de fourmi de faire cela?
Balaji Boggaram Ramanarayan
1
non: ant n'est pas un outil sensible aux dépendances. Envisagez sérieusement de porter votre build vers Gradle.
Matthew Mark Miller
1
recommande fortement de porter votre build sur sbt :)
ioleo
2
Excellent. M'a sauvé de quelques heures d'enfer de dépendance!
jseals
24

L'erreur donne probablement plus d'informations comme celle-ci (bien que les noms de vos pots puissent être différents)

SLF4J: liaison trouvée dans [jar: fichier: / D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar! / Org / slf4j / impl / StaticLoggerBinder .class] SLF4J: Liaison trouvée dans [jar: fichier: / 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]

Remarqué que le conflit vient de deux pots, nommés logback-classic-1.2.3et log4j-slf4j-impl-2.8.2.jar.

Exécutez mvn dependency:treedans ce dossier parent pom.xml du projet, en donnant:

conflit d'arbre de dépendance

Maintenant, choisissez celui que vous voulez ignorer (pourrait consommer un effort délicat, j'ai besoin de plus d'aide à ce sujet)

J'ai décidé de ne pas utiliser celui importé de spring-boot-starter-data-jpa(la dépendance en haut) à travers spring-boot-starteret à travers spring-boot-starter-logging, pom devient:

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

dans le pom ci-dessus spring-boot-starter-data-jpautiliserait le spring-boot-starterconfiguré dans le même fichier, ce qui exclut logging(il contient logback)

Tiina
la source
1
Merci d'avoir présenté mvn dependency:tree. C'est tellement utile ...
Jan Lochman
10

Version Sbt:

Ajoutez exclude("org.slf4j", "slf4j-log4j12")à la dépendance qui comprend de manière transitoire slf4j-log4j12. Par exemple, lorsque vous utilisez Spark avec 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")
)
Ruud
la source
1
Que signifie Sbt?
Petrus Theron
3
Outil de construction simple *
Benny
4
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

J'ai résolu en supprimant ceci: spring-boot-starter-log4j2

Gank
la source
pas clair: voulez-vous dire supprimer / commenter au-dessus de la section xml, ou ajouter?
Lei Yang
3

J'ai juste ignoré / supprimé ce fichier jar.

entrez la description de l'image ici

VK_217
la source
3

Utilisez uniquement les dépendances requises, pas toutes :))). Pour moi, pour le travail normal du processus de journalisation, vous avez besoin de cette dépendance exclure les autres de 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>
Musa
la source
3

Ce problème est dû au fait que la classe StaticLoggerBinder.class appartient à deux fichiers JAR différents. cette classe fait référence à logback-classic-1.2.3.jar et la même classe également référencée à partir de log4j-slf4j-impl-2.10.0.jar. les deux pots dans classpath. Il y a donc conflit entre eux. C'est la raison pour laquelle le fichier journal n'est pas généré même si le fichier log4j2.xml se trouve dans le chemin de classe [src / main / resource].

Nous avons donc sélectionné l'un des fichiers jar, je recommande d'utiliser le fichier log4j-slf4j-impl-2.10.0.jar et d'exclure le fichier logback-classic-1.2.3.jar. Solution: ouvrez le fichier pom et affichez la hiérarchie des dépendances [éclipse] ou exécutez la commande
mvn dependency: tree pour découvrir l'arborescence des dépendances et la source de dépendance qui téléchargent la dépendance. trouver la dépendance conflictuelle et les exclure. Pour l'application Springboot, essayez ceci.

<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
la source
2

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

## J'ai corrigé ce problème

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

pradeep charan jadi
la source
2

Pour moi, cela s'est avéré être un problème Eclipse / Maven après le passage de log4j à logback. Jetez un œil à votre .classpathfichier et recherchez la chaîne "log4j".

Dans mon cas, j'avais là-bas: <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" />

La suppression de ces entrées du fichier (ou vous pouvez le régénérer) a résolu le problème.

helmy
la source
2

Pour moi, la réponse a été de forcer une reconstruction Maven. Dans Eclipse:

  1. Faites un clic droit sur le projet-> Maven -> Désactiver la nature Maven
  2. Faites un clic droit sur le projet-> Spring Tools> Update Maven Dependencies
  3. Faites un clic droit sur le projet-> Configurer> Convertir le projet Maven
DS.
la source
0

J'ai eu le même problème. Dans mon pom.xml, j'avais les deux

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

Lorsque j'ai supprimé la dépendance Web Spring-Boot-Starter-Web, le problème a été résolu.

Anna Gaitanidi
la source
-1

La combinaison de <scope>provided</scope>et <exclusions>n'a pas fonctionné pour moi.

Je devais utiliser ceci:

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

empty.jarest un fichier jar avec littéralement rien dedans.

Alex R
la source
-5

Semble supprimer le répertoire .m2 et:

mvn install -DskipTests -T 4 résolu ce problème pour moi.

bhavin brahmkshatriya
la source