897 votes

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 nécessite donc slf4j comme dépendance. En conséquence, j'ai ajouté le jar slf4j-api.jar (1.6) à mon bundle de fichiers war.

L'application fonctionne bien dans tcServer sauf pour l'erreur suivante : SLF4J : Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J : Implémentation par défaut du logger no-operation (NOP). SLF4J : Voir http://www.slf4j.org/codes.html#StaticLoggerBinder pour plus de détails.

Cependant, lorsque je déploie dans WebSphere, j'obtiens une erreur java.lang.NoClassDefFoundError : org.slf4j.impl.StaticLoggerBinder.

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

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

0 votes

Ce site article a résolu mon problème

0 votes

J'ai répondu à cette question ici. stackoverflow.com/a/66954369/13898185

820voto

prasann Points 1418

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

Le retour en arrière de No-Op n'est possible qu'avec slf4j -1.6+, donc toute version antérieure à celle-ci déclenchera une exception et arrêtera votre déploiement.

Il existe une documentation dans Site SLf4J pour résoudre ce problème. Je l'ai suivi et j'ai ajouté slf4j-simple-1.6.1.jar à ma demande 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 quelqu'un qui est confronté à ce problème.

5 votes

Oui, l'erreur se produit comme indiqué ici - slf4j.org/manuel.html Mais j'obtiens une nouvelle erreur maintenant - Caused by : java.lang.ClassNotFoundException : org.apache.commons.logging.LogFactory

2 votes

"Comme Ceki l'a souligné, il y avait des tonnes de jars que WebSphere utilisait et l'un d'entre eux pointait vers une ancienne version de slf4j." - Autant pour Maven qui s'occupe des dépendances ! Quelle blague.

227 votes

467voto

Igor Katkov Points 1124

Ceci est pour ceux qui sont venus ici à partir 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-simple</artifactId>
        <version>1.6.4</version>
    </dependency>

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

3 votes

Y a-t-il une raison pour que slf4j-simple de ne pas être la même version que slf4j-api ? Ils fonctionneraient probablement bien ensemble, mais je pense que c'est plus sûr et une meilleure pratique en général de les faire utiliser la même version. De plus, si vous avez besoin d'activer la journalisation en mode console uniquement, par exemple, lors de l'exécution de tests unitaires, alors slf4j-simple semble être suffisante (elle l'était pour moi cependant).

35 votes

AFAIK vous ne devriez avoir qu'une seule impl de slf4j, c'est-à-dire soit slf4j-log4j12 OU slf4j-simple, pas les deux.

0 votes

@Igor KatKov cela ne fonctionne que sur la machine locale mais j'obtiens la même erreur sur Jenkins je ne suis pas sûr de ce qui ne va pas. pouvez-vous s'il vous plaît clarifier.

51voto

Ashish Points 2798

Vous devez ajouter le fichier jar suivant dans votre classpath : 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

0 votes

Mais je n'ai pas ce jar dans le classpath de mon tcServer, c'est ce qui me perturbe. Je ne comprends pas comment je peux ne pas avoir besoin d'un jar supplémentaire dans tcServer mais en avoir besoin dans WebSphere.

1 votes

Cela a fonctionné pour moi, et c'est beaucoup plus simple que la réponse acceptée. La version 1.7.7 a également fonctionné.

1 votes

J'avais déjà jul-to-slf4j dans mon pom.xml et j'ai ajouté slf4j-simple dans le passé et cela fonctionne bien.

16voto

stones333 Points 1112

Mettre le fichier slf4j-log4j12-1.6.4.jar dans le classpath fera l'affaire.

8 votes

Or add the dependency into your pom <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>

12voto

Anver Sadhat Points 805

SLF4j est une abstraction pour divers cadres de journalisation . Ainsi, en plus de slf4j, vous devez inclure n'importe quel cadre de journalisation comme log4j ou logback (etc.) dans votre classpath.
Pour avoir une idée, il faut se référer à la Premier pas de bébé sur http://logback.qos.ch/manual/introduction.html

2 votes

L'ajout de logback a réglé le problème pour moi. J'ai déposé la dernière version de logback classic dans pom (1.1.7) et cela a échoué parce que la dépendance de slf4j était trop vieille (1.6.2). La mise à jour de logback en 1.0.0 et le maintien de slf4j en 1.6.x ont fonctionné, tout comme la mise à jour de slf4j en 1.7.20 et le maintien de logback en 1.1.7.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X