943 Stimmen

SLF4J: Die Klasse "org.slf4j.impl.StaticLoggerBinder" konnte nicht geladen werden.

Meine Anwendung soll sowohl auf tcServer als auch auf WebSphere 6.1 eingesetzt werden. Diese Anwendung verwendet ehCache und benötigt daher slf4j als Abhängigkeit. Als Ergebnis habe ich das slf4j-api.jar (1.6) jar zu meinem War-Datei-Bundle hinzugefügt.

Die Anwendung funktioniert in tcServer einwandfrei, bis auf den folgenden Fehler:

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 einsetze, 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 kein anderes slf4j jar.

Hat jemand eine Idee, was hier passieren könnte?

6voto

gowthamjs23 Punkte 342

Bitte fügen Sie die folgenden Abhängigkeiten zu pom 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>

5voto

Ceki Punkte 25510

Im Fall von Websphere haben Sie irgendwo eine ältere Version von slf4j-api.jar, 1.4.x. oder 1.5.x herumliegen. Das Verhalten, das Sie auf dem tcServer beobachten, d.h. der Failover zu NOP, tritt bei slf4j Versionen 1.6.0 und später auf. Stellen Sie sicher, dass Sie slf4j-api-1.6.x.jar auf allen Plattformen verwenden und dass keine ältere Version von slf4j-api auf dem Klassenpfad liegt.

3voto

Lu55 Punkte 19425

Comme SLF4J Handbuch Staaten

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

et

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

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

NoOp-Bindung (slf4j-nop)

Bindung für NOP, wobei alle Aufzeichnungen stillschweigend verworfen werden.

Prü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 in System.err aus. Es werden nur Meldungen der Stufe INFO und höher ausgegeben. Diese Bindung kann im Zusammenhang mit kleinen Anwendungen nützlich sein.

Prü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 Logging-Frameworks (java.util.logging, logback, log4j)

Sie benötigen eine dieser Bindungen, wenn Sie ein Protokoll in eine Datei schreiben wollen.

Siehe Beschreibung und Anleitung unter https://www.slf4j.org/manual.html#projectDep


Meine Meinung

Ich würde empfehlen Logback denn es ist ein Nachfolger des log4j Projekt.

Die neueste Version der Bindung finden Sie unter https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav

Sie erhalten sofort eine Konsolenausgabe, aber wenn Sie Protokolle in eine Datei schreiben möchten, geben Sie einfach FileAppender Konfiguration zum src/main/resources/logback.xml oder an den src/test/resources/logback-test.xml einfach so:

<?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 ausführliche Beschreibung im Handbuch: https://logback.qos.ch/manual/configuration.html )

3voto

Vishal Barvaliya Punkte 153

Gemäß den SLF4J-Fehlercodes

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

Beachten Sie, dass slf4j-api Versionen 2.0.x und später die ServiceLoader Mechanismus. Backends wie logback 1.3 und später, die auf slf4j-api 2.x abzielen, werden nicht mit org.slf4j.impl.StaticLoggerBinder ausgeliefert. Wenn Sie ein Logging Backend platzieren, das auf slf4j-api 2.0.x abzielt, benötigen Sie slf4j-api-2.x.jar auf dem Klassenpfad. Siehe auch relevante FAQ Eintrag.

SEIT 1.6.0 Ab SLF4J Version 1.6 wird SLF4J in Ermangelung einer Bindung standardmäßig eine No-Operation (NOP) Logger Implementierung verwenden.

Wenn Sie für die Paketierung einer Anwendung verantwortlich sind und sich nicht um die Protokollierung kümmern, dann können Sie diese Warnmeldung loswerden, indem Sie slf4j-nop.jar in den Klassenpfad Ihrer Anwendung aufnehmen. 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. Wenn eine Bibliothek eine Kompilierzeit-Abhängigkeit von einer SLF4J-Bindung deklariert, zwingt sie diese Bindung dem Endbenutzer auf und negiert damit den Zweck von SLF4J.

3voto

Asanka Sampath Punkte 457

Kann dies mit derselben Version behoben werden. Ich habe dies versucht und es gelöst

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X