web-dev-qa-db-fra.com

SLF4J: Le chemin d'accès aux classes contient plusieurs liaisons SLF4J

Je reçois l'erreur suivante. Il semble qu'il existe de nombreux frameworks de journalisation liés à sl4j. Vous ne savez 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.
169
user1493140

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

Version Gradle;

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

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]

Remarquez que le conflit provient de deux jars, nommés logback-classic-1.2.3 et log4j-slf4j-impl-2.8.2.jar.

Exécutez mvn dependency:tree dans le dossier parent de ce projet pom.xml en donnant:

 dependency tree conflict

Maintenant, choisissez celui que vous voulez ignorer (cela pourrait prendre 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 supérieure) via spring-boot-starter et via 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>

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

13
Tiina

Version sbt:

Ajoutez exclude("org.slf4j", "slf4j-log4j12") à la dépendance qui inclut transitoirement 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")
)
8
Ruud
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

J'ai résolu par supprimer ceci: spring-boot-starter-log4j2

2
Gank

Utilisez seulement la dépendance requise, 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>
1
Musa

... org.codehaus.mojo cobertura-maven-plugin 2.7 tester ch.qos.logback logback-classic outils com.Sun ... 

## j'ai corrigé avec ça

... org.codehaus.mojo cobertura-maven-plugin 2.7 tester ch.qos.logback logback-classic outils com.Sun ... 

1

Je viens d'ignorer/supprimer ce fichier jar.

 enter image description here

1
VK_217

Ceci 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 est également référencée à partir de log4j-slf4j-impl-2.10.0.jar. les deux de jar dans classpath. Il y a donc conflit entre eux. Cela est dû au fait que le fichier journal n'est pas généré, même si le fichier log4j2.xml dans le chemin d'accès aux classes [src/main/resource].

Nous avons donc sélectionner l'un de jar, je vous recommande d'utiliser le fichier log4j-slf4j-impl-2.10.0.jar et d'exclure le fichier logback-classic-1.2.3.jar Solution: ouvrir le fichier pom et afficher la hiérarchie des dépendances [Eclipse] ou exécuter
mvn dependency: commande de l'arbre pour connaître l'arbre de dépendance et la source de dépendance qui télécharge la dépendance. trouver la dépendance en conflit 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.
0
Rajeev Rathor

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

Dans mon cas, j'avais les éléments suivants: <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" />

Supprimer ces entrées du fichier (ou vous pourriez le régénérer) a résolu le problème.

0
helmy

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

  1. Faites un clic droit sur projet-> Maven -> Désactiver la nature Maven
  2. Faites un clic droit sur projet-> Outils de ressort> Mettre à jour les dépendances Maven
  3. Faites un clic droit sur projet-> Configurer> Convertir un projet Maven
0
DS.