web-dev-qa-db-fra.com

SLF4J: Impossible de charger la classe "org.slf4j.impl.StaticLoggerBinder"

Mon application doit être déployée à la fois sur tcServer et WebSphere 6.1. Cette application utilise ehCache et requiert donc slf4j en tant que dépendance. En conséquence, j'ai ajouté le fichier jar slf4j-api.jar (1.6) à mon ensemble de fichiers war.

L'application fonctionne correctement dans tcServer, à l'exception de l'erreur suivante:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Cependant, lorsque je déploie dans WebSphere, je reçois un Java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder.

J'ai vérifié les classpaths des deux serveurs d'applications et il n'y a pas d'autre fichier jar slf4j.

Quelqu'un a-t-il une idée de ce qui peut se passer ici?

513
DJ180

J'ai eu le même problème avec WebSphere 6.1. Comme Ceki l'a souligné, WebSphere utilisait des tonnes de pots et l'un d'entre eux pointait vers une ancienne version de slf4j.

La restauration No-Op ne se produit qu'avec slf4j -1.6+, toute version antérieure à cette exception lève une exception et arrête votre déploiement.

Il existe une documentation dans site SLf4J qui résout ce problème. J'ai suivi cela et ajouté slf4j-simple-1.6.1.jar à mon application avec slf4j-api-1.6.1.jar que j'avais déjà.

Cela a résolu mon problème. J'espère que cela aidera les autres qui ont ce problème.

453
prasann

Ceci est pour ceux qui sont venus ici de la recherche Google.

Si vous utilisez maven, ajoutez simplement ce qui suit

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.7.5</version>
   </dependency>

Ou

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
   </dependency>
315
Igor Katkov

Vous devez ajouter le fichier JAR suivant dans votre chemin de classe: slf4j-simple-1.6.2.jar. Si vous ne l'avez pas, veuillez le télécharger. Veuillez vous référer à http://www.slf4j.org/codes.html#multiple_bindings

41
ashish

Ajoutez simplement ceci à votre pom.xml:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.21</version>
</dependency>
35
Benny Neugebauer

Quelques réponses recommandent d'ajouter la dépendance slf4j-simple à votre fichier maven pom. Vous voudrez peut-être vérifier la version la plus récente.

Sur https://mvnrepository.com/artifact/org.slf4j/slf4j-simple , vous trouverez la dernière version de la liaison simple SLF4J. Choisissez celui qui vous convient le mieux (le 1.7.26 de 2019-02 est toujours la version stable de 2019-07) et incluez-le dans votre pom.xml.

Pour votre commodité, certaines dépendances sont montrées ici - mais elles peuvent ne pas être à jour lorsque vous lisez ceci!

Version alpha de 2019-06

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>2.0.0-alpha0</version>
</dependency>

Version bêta de février 2019

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.8.0-beta4</version>
</dependency>

Version stable 2019-02

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>1.7.26</version>
</dependency>

J'ai supprimé la partie test de l'oscilloscope grâce au commentaire ci-dessous.

27
Wolfgang Fahl

Je faisais face à la même erreur. J'ai configuré slf4j-api, slf4j-log4j12 et log4j dans mon développement local. Toute la configuration était correcte, mais la dépendance slf4j-log4j12 que j’ai copiée à partir de mvnrepository avait une étendue de test <scope>test</scope>. Quand j'ai enlevé ça, tout va bien.

Quelques fois des erreurs stupides nous brisent la tête;)

23
thangaraj

Parfois, nous devrions voir la note de l'avertissement, par exemple. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details..

Vous pouvez rechercher la raison pour laquelle cet avertissement vient.
L'ajout d'un des fichiers jar de *slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar ou logback-classic.jar* au chemin d'accès aux classes devrait résoudre le problème.

compile "org.slf4j:slf4j-api:1.6.1" compile "org.slf4j:slf4j-simple:1.6.1"

par exemple, ajoutez le code ci-dessus à votre build.gradle ou le code correspondant à pom.xml pour le projet maven.

19
Edward

mettre le fichier slf4j-log4j12-1.6.4.jar dans le chemin de classe fera l'affaire.

14
stones333

Si vous utilisez maven pour la gestion des dépendances, vous pouvez simplement ajouter la dépendance suivante dans pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

Pour les utilisateurs non-Maven Il suffit de télécharger la bibliothèque et de la placer dans le classpath de votre projet.

Ici vous pouvez voir les détails: http://www.mkyong.com/wicket/Java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/

10
shohan

SLF4j est une abstraction pour divers cadres de journalisation . Par conséquent, en plus d'avoir slf4j, vous devez inclure l'un de vos frameworks de journalisation comme log4j ou logback (etc.) dans votre chemin d'accès aux classes.
Pour avoir une idée, reportez-vous au premier pas de bébé dans http://logback.qos.ch/manual/introduction.html

8
Anver Sadhat

Slf4j est une façade pour les infrastructures de journalisation sous-jacentes telles que log4j, logback, Java.util.logging.

Pour vous connecter aux frameworks sous-jacents, slf4j utilise une liaison.

  • log4j - slf4j-log4j12-1.7.21.jar
  • Java.util.logging - slf4j-jdk14-1.7.21.jar etc.

L'erreur ci-dessus est renvoyée si le fichier de jonction est oublié. Vous pouvez télécharger ce fichier et l'ajouter à classpath.

Pour la dépendance maven,

<dependency> 
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

Cette dépendance, en plus de slf4j-log4j12-1.7.21.jar, extraira slf4j-api-1.7.21.jar ainsi que log4j-1.2.17.jar dans votre projet.

Référence: http://www.slf4j.org/manual.html

5
venkatesh mankena

J'étais confronté au même problème avec les applications Spring-boot-2 avec la bibliothèque Java 9.

L'ajout de la dépendance suivante dans mon fichier pom.xml a résolu le problème pour moi:

    <dependency>
        <groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
        <artifactId>slf4j-maven-plugin-log</artifactId>
        <version>1.0.0</version>
    </dependency>
5
KayV

Dans le cas Websphere, vous avez une version plus ancienne de slf4j-api.jar, 1.4.x. ou 1.5.x traîner quelque part. Le comportement observé sur tcServer, c'est-à-dire le basculement vers NOP, se produit sur les versions slf4j 1.6.0 et supérieures. Assurez-vous que vous utilisez slf4j-api-1.6.x.jar sur toutes les plateformes et qu'aucune version plus ancienne de slf4j-api n'est placée dans le chemin de classe.

4
Ceki

J'ai eu ce problème quand j'ai eu l'erreur suivante:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

quand j’utilisais slf4j-api-1.7.5.jar dans mon libs.

En dépit de cela, j’ai essayé avec l’ensemble des bocaux complémentaires suggérés, comme slf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5, le message d’erreur persistait toujours. Le problème a finalement été résolu lorsque j'ai ajouté slf4j-jdk14-1.7.5.jar aux Java libs.

Obtenez le package slf4j complet à l’adresse http://www.slf4j.org/download.html

4
user278049

Ajoutez les dépendances suivantes à pom pour résoudre ce problème.

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.25</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.25</version>
</dependency>
4
gowthamjs23

Je travaille dans un projet Struts2 + Spring. Il faut donc une dépendance slf4j-api-1.7.5.jar.

Si je lance le projet, je reçois une erreur comme

Impossible de charger la classe "org.slf4j.impl.StaticLoggerBinder"

J'ai résolu mon problème en ajoutant le slf4j-log4j12-1.7.5.jar.

Ajoutez donc ce pot dans votre projet pour résoudre le problème.

3
softmage99

As Manuel SLF4J déclare

La façade de journalisation simple pour Java (SLF4J) sert de façade simple ou d'abstraction pour divers cadres de journalisation, tels que Java.util.logging, logback et log4j.

et

L'avertissement disparaît dès que vous ajoutez une liaison à votre chemin de classe.

Vous devez donc choisir quelle liaison voulez-vous utiliser.

NoOp binding (slf4j-nop)

Liaison pour NOP, élimination silencieuse de toute la journalisation.

Vérifiez la nouvelle version sur https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav

Liaison simple (slf4j-simple)

renvoie tous les événements vers System.err. Seuls les messages de niveau INFO et supérieur sont imprimés. Cette liaison peut être utile dans le contexte de petites applications.

Vérifiez la nouvelle version sur https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav

Liaisons pour les infrastructures de journalisation (Java.util.logging, logback, log4j)

Vous avez besoin de l’une de ces liaisons si vous voulez écrire le journal dans un fichier.

Voir la description et les instructions sur https://www.slf4j.org/manual.html#projectDep


Mon avis

Je recommanderais Logback car c'est un successeur du log4j projet.

Consultez la dernière version de la liaison à l'adresse https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav

Vous obtenez une sortie de console prête à l'emploi, mais si vous avez besoin d'écrire des journaux dans un fichier, mettez simplement FileAppender configuration dans le src/main/resources/logback.xml ou dans le src/test/resources/logback-test.xml comme suit:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/logs.log</file>

        <encoder>
            <pattern>%date %level [%thread] %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger level="DEBUG" name="com.myapp"/>
</configuration>

(Voir la description détaillée dans le manuel: https://logback.qos.ch/manual/configuration.html )

3
Lu55

J'ai ajouté cette dépendance pour résoudre ce problème:

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25
2
Amado Saladino

En guise d'alternative à l'inclusion de pots et aux solutions Maven pures, vous pouvez l'inclure from maven avec gradle.

Exemple pour la version 1.7.25

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

Placez ceci dans les dépendances de votre fichier build.gradle.

2
Vrakfall

Selon SLF4J documentation officielle

Impossible de charger la classe org.slf4j.impl.StaticLoggerBinder

Ce message d'avertissement est signalé lorsque la classe org.slf4j.impl.StaticLoggerBinder n'a pas pu être chargée en mémoire. Cela se produit lorsqu'aucune liaison SLF4J appropriée n'a pu être trouvée sur le chemin de classe. Placer un (et un seul) de slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar ou logback-classic.jar sur le chemin de classe devrait résoudre le problème.

Ajoutez simplement ce fichier avec slf4j api.jar à votre chemin d'accès aux classes pour que tout se passe bien. Bonne chance

1
Roushan

Je le résous en ajoutant cette bibliothèque: slf4j-simple-1.7.25.jar Vous pouvez le télécharger sur le site officiel https://www.slf4j.org/download.html

1
Luis Manrique
     <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>

Mettez la dépendance mentionnée ci-dessus dans le fichier pom.xml

1
Ajay

Je sais que ce post est un peu vieux, mais au cas où quelqu'un d'autre rencontrerait ce problème:

Ajoutez slf4j-jdk14-X.X.X.jar à votre CLASSPATH (où X.X.X est le numéro de version, par exemple slf4j-jdk14-1.7.5.jar).

HTH Peter

0
midiman

Voici mes 5 cents ...

J'ai eu les mêmes problèmes lors de l'exécution des tests. J'ai donc corrigé le problème en ajoutant une implémentation uniquement pour l'exécution du test. J'utilise gradle pour ce projet.

// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

groupe testRuntimeOnly: 'ch.qos.logback', nom: 'logback-classic', version: '1.2.3'

0
Esteban

J'utilise Jena et j'ajoute la dépendance suivante à pom.xml

<dependency> 
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.0.13</version>
</dependency>

J'essaie d'ajouter slf4j-simple mais cela disparaît simplement de l'erreur "SLF4J: Impossible de charger la classe" org.slf4j.impl.StaticLoggerBinder "", mais logback-classic affiche plus d'informations en détail.

Le document officiel

0
Pingjiang Li

la solution est indiquée sur leur site officiel:

Impossible de charger la classe org.slf4j.impl.StaticLoggerBinder

Ce message d'avertissement est signalé lorsque la classe org.slf4j.impl.StaticLoggerBinder n'a pas pu être chargée en mémoire. Cela se produit lorsqu'aucune liaison SLF4J appropriée n'a pu être trouvée sur le chemin de classe. Placer un (et un seul) de slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar ou logback-classic.jar sur le chemin d'accès aux classes devrait résoudre le problème. SINCE 1.6.0 À partir de la version 1.6 de SLF4J, en l'absence de liaison, SLF4J utilisera par défaut une implémentation de consignateur sans opération (NOP). Si vous êtes responsable du conditionnement d'une application et que vous ne vous préoccupez pas de la journalisation, le fait de placer slf4j-nop.jar sur le chemin de classe de votre application supprimera ce message d'avertissement. Notez que les composants incorporés tels que les bibliothèques ou les frameworks ne doivent pas déclarer une dépendance à une liaison SLF4J mais dépendent uniquement de slf4j-api. Lorsqu'une bibliothèque déclare une dépendance au moment de la compilation à une liaison SLF4J, elle impose cette liaison à l'utilisateur final, annulant ainsi le but de SLF4J.

solution: j'ai ajouté à mon projet en utilisant maven research sur intellij et j'ai choisi le fichier slf4j-jdk14.jar.

0
Badr Bellaj

Pour moi, le problème était le suivant: en utilisant Hibernate, j’ai vu qu’il utilisait déjà slf4j et qu’il était déjà dans mon chemin de classe; j’ai donc décidé de l’utiliser. La prochaine étape - ajouter imlementor pour slf4j, alors j’ai ajouté à maven:

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.25</version>
</dependency>

Mais cela a échoué avec une erreur! SLF4J: Echec du chargement de la classe "org.slf4j.impl.StaticLoggerBinder"

La solution était la suivante: la dépendance de slib4 par Hibernate était la version 1.7.26, et j'ai ajouté une dépendance de version mineure 1.7.25. Donc, quand j'ai corrigé cela - tout est devenu OK

0
JeSa

Très probablement, votre problème était dû à <scope>test</scope> (dans certains cas également <scope>provided</scope>), comme indiqué @ thangaraj .

Documentation dit:

Cette étendue indique que la dépendance n'est pas requise pour une utilisation normale de l'application et n'est disponible que pour les phases de compilation et d'exécution du test. Les dépendances de test ne sont pas transitives et ne sont présentes que pour les chemins de classes de test et d’exécution.

Donc, si vous n'avez pas besoin de dépendances à des fins de test, vous pouvez utiliser à la place de (ce que vous verrez dans mvnrepository ):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.24</version>
    <scope>test</scope>
</dependency>

Sans aucune portée (par défaut, serait la portée de la compilation si aucune autre portée n'est fournie):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
</dependency>

C'est pareil que:

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
 <dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
   <scope>compile</scope>
 </dependency>
0
invzbl3