SLF4J: Fehler beim Laden der Klasse "org.slf4j.impl.StaticLoggerBinder"


619

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?


Dieser Artikel hat mein Problem gelöst
Buchhalter م

Antworten:


517

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.jarmeiner Bewerbung hinzu , mit slf4j-api-1.6.1.jarder ich bereits hatte.

Dies löste mein Problem. Hoffe, es hilft anderen, die dieses Problem haben.


4
Ja, der Fehler geht wie auch hier erwähnt - slf4j.org/manual.html Aber ich bekomme jetzt einen neuen Fehler - Auslöser: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
David Blaine

1
"Wie Ceki betonte, gab es Tonnen von Gläsern, die WebSphere verwendete, und einer von ihnen zeigte auf eine ältere Version von slf4j." - Soviel zu Maven, der sich um Abhängigkeiten kümmert! Was für ein Witz.
AndroidDev


2
Ich benutze 1.7 und habe das gleiche Problem. Ich füge slf4j-simple-1.7.jar hinzu und jetzt ist das Problem gelöst.
Littletiger

1
Das funktioniert bei mir nicht. Das slf4j-simple jar nimmt die log4j.properties nicht auf. Stattdessen verwende ich die Implementierung, indem ich slf4j-log4j12 und log4j jar hinzufüge, was für mich gut funktioniert.
Flyrain

379

Dies ist für diejenigen, die von der Google-Suche hierher gekommen sind.

Wenn Sie maven verwenden, fügen Sie einfach Folgendes hinzu

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

Oder

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

1
Gibt es einen Grund, slf4j-simplenicht dieselbe Version zu haben wie slf4j-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-simplescheint dies ausreichend zu sein (dies war jedoch für mich der Fall).
Ivaylo Slavov

22
AFAIK Sie sollten nur 1 Impl von slf4j haben, dh entweder slf4j-log4j12 ODER slf4j-simple, nicht beide.
Ondra Žižka

@Igor KatKov Dies funktioniert nur auf dem lokalen Computer, aber der gleiche Fehler auf Jenkins ist nicht sicher, was falsch läuft. können Sie bitte klären
Vikramvi

Für slf4j-api ist eine Konfiguration erforderlich, die beim ersten Ausführen nicht verfügbar ist (und keine Konfigurationsdateien bearbeitet hat). Mit slf4j-simple können Sie Basic Logger verwenden, ohne Dateien außer WYSIWYG zu konfigurieren. Sie können dann zu slf4j-api zurückkehren, sobald Sie gelernt haben, die Dateien zu konfigurieren und die Logger-Ausgabe nach Ihren Wünschen anzupassen. (
Ich

53

Fügen Sie dies einfach Ihrer pom.xml hinzu :

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

3
Die Lösung hat bei mir funktioniert; Es lohnt sich, auf die Dokumentation zu verweisen (wo ich den Fehler erklärt fand): slf4j.org/codes.html#StaticLoggerBinder
Witold Kaczurba

2
nichts anderes als das funktionierte für mich, als ich ein einfaches Beispiel für einen Kafka-Produzenten ausführte. Vielen Dank!
Viren

@ WitoldKaczurba ist richtig. Ich hatte das gleiche Problem bei der Verwendung der Abhängigkeit mit Maven. Ich habe gegoogelt und ging zu slf4j.org/codes.html#StaticLoggerBinder , die das Problem und seine Lösung erklärt. Ich habe slf4j-api Version 1.7.25 verwendet. Nachdem ich die Dokumentation zu dem genannten Link überprüft hatte, habe ich nur <Abhängigkeit> verwendet <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>und das Problem wurde behoben
Mohammad Anas

Ich verstehe den Sinn der Verwendung von Maven nicht, wenn Bibliotheken, die einen Logger benötigen (z. B. Lenker, die slf4j benötigen), dies nicht in ihrem POM deklarieren. Trotzdem danke.
Eric Duminil

In meinem Fall ist dies keine Lösung. Es ist nur Informationen zu verbergen, dass es inkompatible Versionen von slf4j und log4j oder einem anderen Plugin gibt.
Hariprasad

42

Sie 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_bindings


Aber ich habe dieses Glas nicht in meinem tcServer-Klassenpfad, das verwirrt mich. Ich verstehe nicht, wie ich kein zusätzliches Glas in tcServer brauche, sondern in WebSphere
JJ180

1
Arbeitete für mich und viel einfacher als die akzeptierte Antwort. Version 1.7.7 hat auch funktioniert.
La-Comadreja

1
Ich hatte bereits jul-to-slf4jin meinem pom.xmlund gerade zuvor hinzugefügt slf4j-simpleund es funktioniert gut.
Slugmandrew

Wie fügt man einfach die JAR-Datei zum Klassenpfad hinzu?
Dean013

Können Sie mir bitte erklären, wie der Klassenpfad lautet? wo ist? Ich verstehe nicht
Rose8525

36

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

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

Beta-Version vom Februar 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>

Stabile Version 2019-12

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

Ich habe den Bereichstestteil dank des Kommentars unten entfernt.


6
Warum verwenden Sie <scope>test</scope>? Nach meiner Erfahrung brauche ich zumindest runtimeSpielraum, um sicherzustellen, dass sich das slf4j-simpleauf dem Klassenpfad befindet. Neugierig, wie Sie dies dazu gebracht haben, nur mit testUmfang zu arbeiten ...
ecoe

Vielen Dank für den Hinweis. Ich habe das Scope-Tag entsprechend aus meiner Antwort entfernt. Es war ein Problem mit Ausschneiden und Einfügen - der Link, den ich bereitstelle, stellt auf diese Weise die Beta-Abhängigkeit bereit.
Wolfgang Fahl

27

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


1
Tausend Dank! Ich hatte das gleiche Problem und wollte es aufgeben, bis ich Ihren Beitrag gefunden habe!
Ergodyne

1
Dies half mir auch
cod3min3

27

Irgendwann sollten wir den Hinweis aus der Warnung sehen SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details..

Dies geschieht, wenn im Klassenpfad keine geeignete SLF4J-Bindung gefunden werden konnte

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.jaroder logback-classic.jar*zum Klassenpfad sollte das Problem lösen.

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

Fügen Sie beispielsweise den obigen Code zu Ihrem build.gradleoder dem entsprechenden Code pom.xmlfür das Maven-Projekt hinzu.


15

Datei slf4j-log4j12-1.6.4.jarin den Klassenpfad legen wird den Trick tun.


6
oder fügen Sie die Abhängigkeit zu Ihrer pom <dependency> <groupId> org.slf4j </ groupId> <artifactId> slf4j-log4j12 </ifactId> </ dependency> hinzu
enkor

11

Wenn Sie maven für das Abhängigkeitsmanagement verwenden, können Sie einfach die folgende Abhängigkeit in pom.xml hinzufügen

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

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/


1
Auch für Maven-Benutzer stellte ich fest, dass ich Folgendes in pom.xml hinzufügen musste, wodurch auch der Logback-Core automatisch eingefügt wird: <Abhängigkeit> <Gruppen-ID> ch.qos.logback </ Gruppen-ID> <ArtefaktId> Logback-Klassiker </ Artefakt-ID> <Version> 1.0.9 </ Version> </ Abhängigkeit>
Paul

2
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 hier
Abhijeet

10

SLF4j 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


2
Das Hinzufügen von Logback hat dies für mich behoben. Ich habe den neuesten Logback-Klassiker in pom (1.1.7) abgelegt und es ist fehlgeschlagen, weil die slf4j-Abhängigkeit zu alt war (1.6.2). Das Herabstufen des Logbacks auf 1.0.0 und das Belassen von slf4j bei 1.6.x funktionierte ebenso wie das Aktualisieren von slf4j auf 1.7.20 und das Verlassen des Logbacks bei 1.1.7.
ECDragon

5

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.

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

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

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

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


Ihre Lösung war die einzige, die für mich funktioniert hat, danke!
Edenshaw

5

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:

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

4

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.


Vielen Dank, ich habe meinen WebSphere 6.1-Klassenpfad überprüft und sehe keine andere Version von slf4j, z. B. habe ich in meinem WebSphere-Dateisystem nach slf4j jar gesucht und nur meine 1.6-Version zurückgegeben. Wissen Sie, ob WebSphere mit slf4j geliefert wird?
JJ180

Alles ist möglich, aber ich wäre sehr überrascht, wenn WebSphere mit slf4j-api gebündelt wäre. Schweißbündel slf4j-api.jar. Verwenden Sie Weld?
Ceki

4

Ich bin auf dieses Problem gestoßen, als ich den folgenden Fehler erhalte:

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.

als ich slf4j-api-1.7.5.jarin meinem verwendet habe libs.

Trotz ich mit den ganzen vorgeschlagenen Ergänzung Gläser versucht, wie slf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5die Fehlermeldung blieb still. Das Problem wurde endlich gelöst, als ich slf4j-jdk14-1.7.5.jardie Java-Bibliotheken hinzufügte .

Das gesamte slf4j-Paket finden Sie unter http://www.slf4j.org/download.html


4

Bitte fügen Sie pom die folgenden Abhängigkeiten hinzu, um dieses Problem zu beheben.

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

Ich habe gerade die erste Abhängigkeit eingefügt - wie in einer anderen Antwort angegeben - und es funktioniert. Beide Abhängigkeiten lösen das Problem für mich nicht.
RubioRic

Und möchten lokale Maven anstelle von Bundled Maven von Intellij verwenden.
Abdul Gaffar

4

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

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

Fügen Sie dies in die Abhängigkeiten Ihrer build.gradleDatei ein.


3

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.


3

Als SLF4J Handbuch Staaten

Die Simple Logging Facade für Java (SLF4J) dient als einfache Fassade oder Abstraktion für verschiedene Protokollierungsframeworks wie java.util.logging, logback und log4j.

und

Die Warnung verschwindet, sobald Sie Ihrem Klassenpfad eine Bindung hinzufügen.

Sie sollten also auswählen, welche Bindung Sie verwenden möchten.

NoOp-Bindung (slf4j-nop)

Bindung für NOP, stummes Verwerfen der gesamten Protokollierung.

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

gibt alle Ereignisse an System.err aus. Es werden nur Nachrichten der Stufe INFO und höher gedruckt. Diese Bindung kann im Zusammenhang mit kleinen Anwendungen nützlich sein.

Ü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 FileAppenderKonfiguration der src/main/resources/logback.xmloder die src/test/resources/logback-test.xmlwie folgt aus :

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

(Siehe detaillierte Beschreibung im Handbuch: https://logback.qos.ch/manual/configuration.html )


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

Fügen Sie die oben genannte Abhängigkeit in die Datei pom.xml ein


Denken Sie jedoch daran, die neueste Version zu überprüfen.
user1053510

2

Ich habe diese Abhängigkeit hinzugefügt, um dieses Problem zu beheben:

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

1

Laut offizieller Dokumentation von SLF4J

Fehler beim Laden der Klasse org.slf4j.impl.StaticLoggerBinder

Diese Warnmeldung wird gemeldet, wenn die Klasse org.slf4j.impl.StaticLoggerBinder nicht in den Speicher geladen werden konnte. Dies geschieht, wenn im Klassenpfad keine geeignete SLF4J-Bindung gefunden werden konnte. Das Platzieren eines (und nur eines) von slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar oder logback-classic.jar im Klassenpfad sollte das Problem lösen.

Fügen Sie einfach dieses Glas zusammen mit slf4j api.jar zu Ihrem Klassenpfad hinzu, um die Dinge zu erledigen. Viel Glück



1

Das gleiche Problem trat bei Payara 5.191 auf

jcl-over-slf4j löste zusammen mit slf4j-log4j12 das Problem

<properties>
  <slf4j.version>1.7.29</slf4j.version>
</properties>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>${slf4j.version}</version>
  <type>jar</type>
</dependency> 

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>${slf4j.version}</version>
</dependency>        

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>${slf4j.version}</version>
</dependency>

0

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


1
Schlagen Sie vor, dass Benutzer zur JDK1.4-Protokollierung zurückkehren sollten, um ein Klassenpfadproblem zu beheben? Schauen Sie sich auch diesen FAQ-Eintrag an: slf4j.org/faq.html#need_to_recompile
mwhs

0

Ich benutze Jena und füge die Fellowing-Abhängigkeit zu pom.xml hinzu

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

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


0

Die Lösung ist auf der offiziellen Website angegeben:

Fehler beim Laden der Klasse org.slf4j.impl.StaticLoggerBinder

Diese Warnmeldung wird gemeldet, wenn die Klasse org.slf4j.impl.StaticLoggerBinder nicht in den Speicher geladen werden konnte. Dies geschieht, wenn im Klassenpfad keine geeignete SLF4J-Bindung gefunden werden konnte. Das Platzieren eines (und nur eines) von slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar oder logback-classic.jar im Klassenpfad sollte das Problem lösen. SEIT 1.6.0 Ab SLF4J Version 1.6 verwendet SLF4J ohne Bindung standardmäßig eine NOP-Logger-Implementierung (No-Operation). Wenn Sie für das Packen einer Anwendung verantwortlich sind und sich nicht um die Protokollierung kümmern, wird diese Warnmeldung durch Platzieren von slf4j-nop.jar im Klassenpfad Ihrer Anwendung entfernt. Beachten Sie, dass eingebettete Komponenten wie Bibliotheken oder Frameworks keine Abhängigkeit von einer SLF4J-Bindung deklarieren sollten, sondern nur von slf4j-api abhängen.

Lösung: Ich habe mein Projekt mithilfe von Maven Research auf Intellij erweitert und mich für slf4j-jdk14.jar entschieden.


0

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:

Dieser Bereich gibt an, dass die Abhängigkeit für die normale Verwendung der Anwendung nicht erforderlich ist und nur für die Testkompilierungs- und Ausführungsphase verfügbar ist. Testabhängigkeiten sind nicht transitiv und nur für Test- und Ausführungsklassenpfade vorhanden.

Wenn Sie also keine Abhängigkeiten für Testzwecke benötigen, können Sie stattdessen Folgendes verwenden (was Sie im mvnrepository sehen werden ):

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

Ohne Bereiche (standardmäßig wäre der Kompilierungsbereich, wenn kein anderer Bereich bereitgestellt wird):

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

Dies ist das gleiche wie:

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

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.

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

testRuntimeOnly Gruppe: 'ch.qos.logback', Name: 'logback-classic', Version: '1.2.3'


0

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:

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

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


0

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

IndexRequest indexRequest = new IndexRequest(
  "twitter",
  "tweets",
  id // this is to make our consumer idempotent
).source(record.value(), XContentType.JSON);

Aktueller Code

IndexRequest indexRequest = new IndexRequest("tweets")
  .source(record.value(), XContentType.JSON)
  .id(id); // this is to make our consumer idempotent

Ich benutze bulkrequest und damit entferne ich diesen Fehler.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.