Meine Anwendung soll sowohl auf tcServer als auch auf WebSphere 6.1 bereitgestellt werden. Diese Anwendung verwendet ehCache und benötigt daher slf4j als Abhängigkeit. Als Ergebnis habe ich die JAR-Datei slf4j-api.jar (1.6) zu meinem War-Dateibündel hinzugefügt.
Die Anwendung funktioniert in tcServer mit Ausnahme des folgenden Fehlers einwandfrei:
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.
Wenn ich jedoch in WebSphere bereitstelle, erhalte ich eine java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
.
Auch begleitet von Failed to load class "org.slf4j.impl.StaticMDCBinder"
Ich habe die Klassenpfade beider Anwendungsserver überprüft und es gibt keine andere slf4j-JAR.
Hat jemand irgendwelche Ideen, was hier passieren könnte?
Antworten:
Ich hatte das gleiche Problem mit WebSphere 6.1. Wie Ceki betonte, gab es Tonnen von Gläsern, die WebSphere verwendete, und einer von ihnen zeigte auf eine ältere Version von slf4j.
Der No-Op-Fallback tritt nur mit slf4j -1.6+ auf, sodass alles, was älter ist, eine Ausnahme auslöst und Ihre Bereitstellung anhält.
Auf der SLf4J-Site befindet sich eine Dokumentation , die dieses Problem behebt. Ich folgte dem und fügte
slf4j-simple-1.6.1.jar
meiner Bewerbung hinzu , mitslf4j-api-1.6.1.jar
der ich bereits hatte.Dies löste mein Problem. Hoffe, es hilft anderen, die dieses Problem haben.
quelle
Dies ist für diejenigen, die von der Google-Suche hierher gekommen sind.
Wenn Sie maven verwenden, fügen Sie einfach Folgendes hinzu
Oder
quelle
slf4j-simple
nicht dieselbe Version zu haben wieslf4j-api
? Sie würden wahrscheinlich gut zusammenarbeiten, aber ich denke, es ist sicherer und allgemein besser, wenn sie dieselbe Version verwenden. Wenn Sie beispielsweise die Nur-Konsolen-Protokollierung aktivieren müssen, wenn Sie beispielsweise Unit-Tests ausführen,slf4j-simple
scheint dies ausreichend zu sein (dies war jedoch für mich der Fall).Fügen Sie dies einfach Ihrer pom.xml hinzu :
quelle
<groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
und das Problem wurde behobenSie müssen Ihrem Klassenpfad folgende JAR-Datei hinzufügen :
slf4j-simple-1.6.2.jar
. Wenn Sie es nicht haben, laden Sie es bitte herunter. Weitere Informationen finden Sie unter http://www.slf4j.org/codes.html#multiple_bindingsquelle
jul-to-slf4j
in meinempom.xml
und gerade zuvor hinzugefügtslf4j-simple
und es funktioniert gut.In einigen Antworten wird empfohlen, die slf4j-einfache Abhängigkeit zu Ihrer Maven-Pom-Datei hinzuzufügen. Möglicherweise möchten Sie nach der aktuellsten Version suchen.
Unter https://mvnrepository.com/artifact/org.slf4j/slf4j-simple finden Sie die neueste Version der einfachen SLF4J-Bindung. Wählen Sie diejenige aus, die am besten zu Ihnen passt (noch 1.7.26 von 2019-02 ist die stabile Version von 2019-07) und fügen Sie sie Ihrer pom.xml hinzu.
Der Einfachheit halber werden hier einige Abhängigkeiten angezeigt - aber sie sind möglicherweise nicht aktuell, wenn Sie dies lesen!
Alpha-Version von 2019-10
Beta-Version vom Februar 2019
Stabile Version 2019-12
Ich habe den Bereichstestteil dank des Kommentars unten entfernt.
quelle
<scope>test</scope>
? Nach meiner Erfahrung brauche ich zumindestruntime
Spielraum, um sicherzustellen, dass sich dasslf4j-simple
auf dem Klassenpfad befindet. Neugierig, wie Sie dies dazu gebracht haben, nur mittest
Umfang zu arbeiten ...Ich hatte den gleichen Fehler. Ich habe slf4j-api, slf4j-log4j12 und log4j in meiner lokalen Entwicklung konfiguriert. Die gesamte Konfiguration war in Ordnung, aber die Abhängigkeit von slf4j-log4j12, die ich aus dem mvnrepository kopiert habe, hatte einen Testumfang
<scope>test</scope>
. Wenn ich das entfernt habe, ist alles in Ordnung.Manchmal brechen uns dumme Fehler den Kopf;)
quelle
Irgendwann sollten wir den Hinweis aus der Warnung sehen
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
.Sie können nach dem Grund suchen, warum diese Warnung angezeigt wird.
Hinzufügen eines des Glases aus
*slf4j-nop.jar
,slf4j-simple.jar
,slf4j-log4j12.jar
,slf4j-jdk14.jar
oderlogback-classic.jar*
zum Klassenpfad sollte das Problem lösen.Fügen Sie beispielsweise den obigen Code zu Ihrem
build.gradle
oder dem entsprechenden Codepom.xml
für das Maven-Projekt hinzu.quelle
Datei
slf4j-log4j12-1.6.4.jar
in den Klassenpfad legen wird den Trick tun.quelle
Wenn Sie maven für das Abhängigkeitsmanagement verwenden, können Sie einfach die folgende Abhängigkeit in pom.xml hinzufügen
Für Nicht-Maven-Benutzer Laden Sie einfach die Bibliothek herunter und fügen Sie sie in Ihren Projektklassenpfad ein.
Hier sehen Sie Details: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/
quelle
This is not an error. This message tells you that you do not have any logger implementation (such as e.g. Logback) added in classpath, and therefore NOP (No Operation) log
Suchen Sie nach Sarxos Kommentar, wie von @Paul erwähnt, müssen Sie Logback-Classic hinzufügen. Ein anderer Ansatz der Veränderung<artifactId>slf4j-simple</artifactId>
von zu<artifactId>slf4j-api</artifactId>
macht auch die Arbeit. Es ist hierSLF4j ist eine Abstraktion für verschiedene Protokollierungsframeworks . Abgesehen von slf4j müssen Sie daher jedes Ihrer Protokollierungsframeworks wie log4j oder logback (usw.) in Ihren Klassenpfad aufnehmen.
Eine Idee finden Sie im ersten Babyschritt unter http://logback.qos.ch/manual/introduction.html
quelle
Slf4j ist eine Fassade für die zugrunde liegenden Protokollierungsframeworks wie log4j, logback, java.util.logging.
Um sich mit zugrunde liegenden Frameworks zu verbinden, verwendet slf4j eine Bindung.
Der obige Fehler wird ausgelöst, wenn das Bindungsglas übersehen wird. Sie können dieses Glas herunterladen und zum Klassenpfad hinzufügen.
Für Maven-Abhängigkeit
Diese Abhängigkeit zieht zusätzlich zu slf4j-log4j12-1.7.21.jar sowohl slf4j-api-1.7.21.jar als auch log4j-1.2.17.jar in Ihr Projekt
Referenz: http://www.slf4j.org/manual.html
quelle
Ich hatte das ähnliche Problem mit Spring-Boot-2-Anwendungen mit Java 9-Bibliothek.
Das Hinzufügen der folgenden Abhängigkeit in meiner pom.xml löste das Problem für mich:
quelle
Im Fall von Websphere haben Sie eine ältere Version von slf4j-api.jar, 1.4.x. oder 1.5.x irgendwo herumliegen. Das Verhalten, das Sie auf tcServer beobachten, dh ein Failover auf NOP, tritt in slf4j-Versionen 1.6.0 und höher auf. Stellen Sie sicher, dass Sie slf4j-api-1.6.x.jar auf allen Plattformen verwenden und dass keine ältere Version von slf4j-api im Klassenpfad platziert ist.
quelle
Ich bin auf dieses Problem gestoßen, als ich den folgenden Fehler erhalte:
als ich
slf4j-api-1.7.5.jar
in meinem verwendet habelibs
.Trotz ich mit den ganzen vorgeschlagenen Ergänzung Gläser versucht, wie
slf4j-log4j12-1.7.5.jar
,slf4j-simple-1.7.5
die Fehlermeldung blieb still. Das Problem wurde endlich gelöst, als ichslf4j-jdk14-1.7.5.jar
die Java-Bibliotheken hinzufügte .Das gesamte slf4j-Paket finden Sie unter http://www.slf4j.org/download.html
quelle
Bitte fügen Sie pom die folgenden Abhängigkeiten hinzu, um dieses Problem zu beheben.
quelle
Als Alternative zum Glaseinschluss und zu reinen Maven-Lösungen können Sie es von Maven mit Gradle einschließen.
Beispiel für die Version
1.7.25
Fügen Sie dies in die Abhängigkeiten Ihrer
build.gradle
Datei ein.quelle
Ich arbeite in einem Projekt Struts2 + Spring. Es braucht also eine Abhängigkeit
slf4j-api-1.7.5.jar
.Wenn ich das Projekt ausführe, erhalte ich Fehler wie
Fehler beim Laden der Klasse "org.slf4j.impl.StaticLoggerBinder"
Ich habe mein Problem gelöst, indem ich das hinzugefügt habe
slf4j-log4j12-1.7.5.jar
.Fügen Sie dieses Glas in Ihr Projekt ein, um das Problem zu lösen.
quelle
Als SLF4J Handbuch Staaten
und
Sie sollten also auswählen, welche Bindung Sie verwenden möchten.
NoOp-Bindung (slf4j-nop)
Überprüfen Sie die neue Version unter https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav
Einfache Bindung (slf4j-simple)
Überprüfen Sie die neue Version unter https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav
Bindungen für die Protokollierungsframeworks (java.util.logging, logback, log4j)
Sie benötigen eine dieser Bindungen, wenn Sie ein Protokoll in eine Datei schreiben möchten.
Siehe Beschreibung und Anweisungen unter https://www.slf4j.org/manual.html#projectDep
Meine Meinung
Ich würde Logback empfehlen, da es ein Nachfolger des log4j- Projekts ist.
Überprüfen Sie die neueste Version der Bindung unter https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav
Sie erhalten Konsolenausgabe aus der Box , aber wenn Sie zu schreiben Protokolle in Datei benötigen nur setzen
FileAppender
Konfiguration dersrc/main/resources/logback.xml
oder diesrc/test/resources/logback-test.xml
wie folgt aus :(Siehe detaillierte Beschreibung im Handbuch: https://logback.qos.ch/manual/configuration.html )
quelle
Fügen Sie die oben genannte Abhängigkeit in die Datei pom.xml ein
quelle
Ich habe diese Abhängigkeit hinzugefügt, um dieses Problem zu beheben:
quelle
Laut offizieller Dokumentation von SLF4J
Fügen Sie einfach dieses Glas zusammen mit slf4j api.jar zu Ihrem Klassenpfad hinzu, um die Dinge zu erledigen. Viel Glück
quelle
Ich löse es, indem ich diese Bibliothek hinzufüge: slf4j-simple-1.7.25.jar Sie können diese im offiziellen Web https://www.slf4j.org/download.html herunterladen
quelle
Das gleiche Problem trat bei Payara 5.191 auf
jcl-over-slf4j löste zusammen mit slf4j-log4j12 das Problem
quelle
Ich weiß, dass dieser Beitrag etwas alt ist, aber falls jemand anderes auf dieses Problem stößt:
Fügen Sie Ihrem CLASSPATH slf4j-jdk14-XXXjar hinzu (wobei XXX die Versionsnummer ist - z. B. slf4j-jdk14-1.7.5.jar).
HTH Peter
quelle
Ich benutze Jena und füge die Fellowing-Abhängigkeit zu pom.xml hinzu
Ich versuche, slf4j-simple hinzuzufügen, aber es verschwindet einfach der Fehler "SLF4J: Fehler beim Laden der Klasse" org.slf4j.impl.StaticLoggerBinder "", aber logback-classic zeigt detailliertere Informationen.
Das offizielle Dokument
quelle
Die Lösung ist auf der offiziellen Website angegeben:
Lösung: Ich habe mein Projekt mithilfe von Maven Research auf Intellij erweitert und mich für slf4j-jdk14.jar entschieden.
quelle
Höchstwahrscheinlich lag Ihr Problem an
<scope>test</scope>
(in einigen Fällen auch<scope>provided</scope>
), wie bereits erwähnt @thangaraj .Die Dokumentation sagt:
Wenn Sie also keine Abhängigkeiten für Testzwecke benötigen, können Sie stattdessen Folgendes verwenden (was Sie im mvnrepository sehen werden ):
Ohne Bereiche (standardmäßig wäre der Kompilierungsbereich, wenn kein anderer Bereich bereitgestellt wird):
Dies ist das gleiche wie:
quelle
Hier sind meine 5 Cent ...
Ich hatte die gleichen Probleme beim Ausführen von Tests. Daher habe ich das Problem behoben, indem ich eine Implementierung nur für die Testlaufzeit hinzugefügt habe. Ich benutze Gradle für dieses Projekt.
quelle
Für mich war das Problem: Mit Hibernate habe ich gesehen, dass es bereits slf4j verwendet hat, und es war bereits in meinem Klassenpfad, also habe ich beschlossen, es zu verwenden. Der nächste Schritt - Hinzufügen von Imlementor für slf4j, also habe ich zu maven hinzugefügt:
Aber es ist mit Fehler gescheitert! SLF4J: Fehler beim Laden der Klasse "org.slf4j.impl.StaticLoggerBinder"
Die Lösung war: Hibernates Abhängigkeit von slf4j war Version 1.7.26 , und ich habe eine geringfügige Versionsabhängigkeit 1.7.25 hinzugefügt . Als ich das reparierte, wurde alles in Ordnung
quelle
Ich habe keine Abhängigkeiten hinzugefügt, sondern nur die Art und Weise geändert, wie ich sie konsumiert habe.
Vorschau-Code
(Kommentieren Sie diesen Code aus, wenn Sie die elastische Suchversion <7.0 verwenden.)
Aktueller Code
Ich benutze bulkrequest und damit entferne ich diesen Fehler.
quelle