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.

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> 

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

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)


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

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


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


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>

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.

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


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.


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

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.


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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.