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?

3voto

softmage99 Punkte 777

Ich bin in einem Projekt Struts2+Spring arbeiten. Es braucht also eine Abhängigkeit slf4j-api-1.7.5.jar .

Wenn ich das Projekt ausführe, erhalte ich folgende Fehlermeldung

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

Ich habe mein Problem gelöst, indem ich die slf4j-log4j12-1.7.5.jar .

Fügen Sie also dieses jar in Ihr Projekt ein, um das Problem zu lösen.

2voto

Das gleiche Problem trat bei payara 5.191 auf.

jcl-over-slf4j zusammen mit slf4j-log4j12 löste 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>

2voto

Esteban Punkte 1293

Hier sind meine 5 Cents...

Ich hatte die gleichen Probleme bei der Durchführung von Tests. Also habe ich es behoben, indem ich eine Implementierung nur für die Testlaufzeit hinzugefügt habe. Ich verwende 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'

2voto

vlatko606 Punkte 695

Für mich war das die totale Lösung:

1

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

plus

2 Datei log4j.properties erstellen

und fügen Sie hinein:

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

sonst habe ich einige Ausnahmen in der Konsole.

2voto

invzbl3 Punkte 4514

Höchstwahrscheinlich wurde Ihr Problem verursacht durch <scope>test</scope> (in manchen Fällen auch <scope>provided</scope> ), wie erwähnt @thangaraj .

Dokumentation sagt:

Dieser Bereich zeigt an, dass die Abhängigkeit nicht für normale Verwendung der Anwendung nicht erforderlich ist und nur für die Testkompilierung und Ausführungsphase zur Verfügung. 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 anstelle von (was Sie in 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>

Ohne jegliche Bereiche (standardmäßig wäre das Kompilierumfang wenn kein anderer Bereich vorgesehen ist):

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

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