it-swarm.it

SLF4J: impossibile caricare la classe "org.slf4j.impl.StaticLoggerBinder"

La mia applicazione deve essere distribuita su tcServer e WebSphere 6.1. Questa applicazione utilizza ehCache e quindi richiede slf4j come dipendenza. Di conseguenza ho aggiunto il jar slf4j-api.jar (1.6) al pacchetto file war.

L'applicazione funziona bene in tcServer tranne per il seguente errore:

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.

Tuttavia, quando distribuisco in WebSphere ottengo un Java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder.

Ho controllato i percorsi di classe di entrambi i server delle applicazioni e non ci sono altri jar di slf4j.

Qualcuno ha qualche idea su cosa potrebbe accadere qui?

480
DJ180

Ho avuto lo stesso problema con WebSphere 6.1. Come ha sottolineato Ceki, c'erano tonnellate di vasi usati da WebSphere e uno di questi stava puntando a una versione precedente di slf4j.

Il rollback No-Op avviene solo con slf4j -1.6+, quindi qualsiasi cosa più vecchia di quella genererà un'eccezione e interromperà la distribuzione.

C'è una documentazione in il sito SLf4J che risolve questo problema. L'ho seguito e aggiunto slf4j-simple-1.6.1.jar alla mia domanda insieme a slf4j-api-1.6.1.jar che avevo già.

Questo ha risolto il mio problema. Spero che aiuti gli altri che hanno questo problema.

428
prasann

Questo è per coloro che sono venuti qui da Google Search.

Se usi Maven, aggiungi quanto segue

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

O

   <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>
291
Igor Katkov

È necessario aggiungere il seguente file jar nel classpath: slf4j-simple-1.6.2.jar. Se non ce l'hai, scaricalo. Si prega di fare riferimento a http://www.slf4j.org/codes.html#multiple_bindings

40
ashish

Basta aggiungere questo al tuo pom.xml :

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

Molte risposte qui suggeriscono di aggiungere la dipendenza slf4j-simple al tuo file maven pom. Potresti voler verificare la versione più recente.

A https://mvnrepository.com/artifact/org.slf4j/slf4j-simple troverai l'ultima versione di SLF4J Simple Binding. Scegli quello che ti piace di più (ancora 1.7.25 dal 2017-03 è la versione stabile del 2019-03) e includilo nel tuo pom.xml.

Versione beta di febbraio 2019

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.8.0-beta4</version>
  <scope>test</scope>
</dependency>

Versione stabile

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.25</version>
</dependency>
23
Wolfgang Fahl

Stavo affrontando lo stesso errore. Ho configurato slf4j-api, slf4j-log4j12 e log4j, nel mio sviluppo locale. Tutta la configurazione andava bene, ma la dipendenza slf4j-log4j12 che ho copiato da mvnrepository aveva l'ambito di prova <scope>test</scope>. Quando ho rimosso questo ogni cosa va bene.

Qualche volta gli errori stupidi ci spezzano la testa;)

21
thangaraj

A volte dovremmo vedere la nota dell'avvertimento, per esempio. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details..

Puoi cercare il motivo per cui viene visualizzato questo avviso.
L'aggiunta di uno dei jar da *slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar o logback-classic.jar* al percorso della classe dovrebbe risolvere il problema.

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

per esempio aggiungi il codice sopra al tuo build.gradle o il codice corrispondente a pom.xml per il progetto maven.

17
Edward

mettere il file slf4j-log4j12-1.6.4.jar nel classpath farà il trucco.

14
stones333

Se si sta utilizzando Maven per la gestione delle dipendenze, è sufficiente aggiungere la seguente dipendenza in pom.xml

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

Per utenti non Maven Basta scaricare la libreria e inserirla nel percorso di classe del progetto.

Qui puoi vedere i dettagli: http://www.mkyong.com/wicket/Java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/

10
shohan

SLF4j è un'astrazione per vari quadri di registrazione . Quindi oltre ad avere slf4j è necessario includere qualsiasi struttura di log come log4j o logback (etc) nel classpath.
Per avere un'idea, fai riferimento a First Baby Step in http://logback.qos.ch/manual/introduction.html

8
Anver Sadhat

Slf4j è una facciata per i framework di registrazione sottostanti come log4j, logback, Java.util.logging.

Per connettersi con i framework sottostanti, slf4j utilizza un'associazione.

  • log4j - slf4j-log4j12-1.7.21.jar
  • Java.util.logging - slf4j-jdk14-1.7.21.jar ecc

L'errore sopra riportato viene generato se il vaso di rilegatura viene perso. Puoi scaricare questo jar e aggiungerlo a classpath.

Per la dipendenza da esperti,

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

Questa dipendenza oltre a slf4j-log4j12-1.7.21.jar, porterà slf4j-api-1.7.21.jar e log4j-1.2.17.jar nel progetto

Riferimento: http://www.slf4j.org/manual.html

5

Stavo affrontando il problema simile con le applicazioni Spring-boot-2 con la libreria Java 9.

L'aggiunta della seguente dipendenza nel mio pom.xml ha risolto il problema per me:

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

Nel caso di Websphere, si ha una versione precedente di slf4j-api.jar, 1.4.x. o 1.5.x in giro da qualche parte. Il comportamento che si osserva su tcServer, ovvero il failover su NOP, si verifica su slf4j versioni 1.6.0 e successive. Assicurati di utilizzare slf4j-api-1.6.x.jar su tutte le piattaforme e che nessuna versione precedente di slf4j-api sia posizionata sul percorso della classe.

4
Ceki

Sono entrato in questo problema quando ho ricevuto il seguente errore:

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.

quando stavo usando slf4j-api-1.7.5.jar nel mio libs.

Nonostante abbia provato con tutti i jar del complemento suggeriti, come slf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5 il messaggio di errore persisteva ancora. Il problema alla fine è stato risolto quando ho aggiunto slf4j-jdk14-1.7.5.jar alle librerie Java.

Ottieni l'intero pacchetto slf4j in http://www.slf4j.org/download.html

4
user278049

Si prega di aggiungere le seguenti dipendenze a pom per risolvere questo problema.

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

Sto lavorando a un progetto Struts2 + Spring. Quindi ha bisogno di una dipendenza slf4j-api-1.7.5.jar.

Se eseguo il progetto, ricevo errori come

Impossibile caricare la classe "org.slf4j.impl.StaticLoggerBinder"

Ho risolto il mio problema aggiungendo il slf4j-log4j12-1.7.5.jar.

Quindi aggiungi questo barattolo nel tuo progetto per risolvere il problema.

3
softmage99

As SLF4J Manual states

Simple Logging Facade per Java (SLF4J) funge da semplice facciata o astrazione per vari framework di registrazione, come Java.util.logging, logback e log4j.

e

L'avviso scomparirà non appena si aggiunge un'associazione al percorso della classe.

Quindi dovresti scegliere quale legame vuoi usare.

NoOp binding (slf4j-nop)

Associazione per NOP, ignorando in modo silenzioso tutto il logging.

Controlla la nuova versione su https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav

Collegamento semplice (slf4j-simple)

invia tutti gli eventi a System.err. Vengono stampati solo i messaggi di livello INFO e superiori. Questo legame può essere utile nel contesto di piccole applicazioni.

Controlla la nuova versione su https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav

Collegamenti per i framework di registrazione (Java.util.logging, logback, log4j)

È necessario uno di questi collegamenti se si intende scrivere il registro in un file.

Vedi la descrizione e le istruzioni su https://www.slf4j.org/manual.html#projectDep


La mia opinione

Vorrei raccomandareLogbackperché è un successore del progetto log4j.

Controlla l'ultima versione del binding per esso all'indirizzo https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav

Ottieni l'output della console fuori dalla scatola, ma se hai bisogno di scrivere i log in un file basta mettere la configurazione FileAppender al src/main/resources/logback.xml o al src/test/resources/logback-test.xml proprio come questo:

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

(Vedere la descrizione dettagliata nel manuale: https://logback.qos.ch/manual/configuration.html )

3
Lu55

Ho aggiunto questa dipendenza per risolvere questo problema:

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

In alternativa all'inclusione di jar e alle soluzioni di puro maven, puoi includerlo da maven con gradle.

Esempio per la versione 1.7.25

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

Metti questo nelle dipendenze del tuo file build.gradle.

2
Vrakfall

Secondo la documentazione ufficiale di SLF4J

Impossibile caricare la classe org.slf4j.impl.StaticLoggerBinder

Questo messaggio di avviso viene segnalato quando la classe org.slf4j.impl.StaticLoggerBinder non può essere caricata in memoria. Ciò si verifica quando non è possibile trovare il binding SLF4J appropriato sul percorso della classe.Posizionamento di uno (e solo uno)di slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar o logback-classic.jar su il percorso di classe dovrebbe risolvere il problema.

Aggiungi semplicemente this jar insieme a slf4j api.jar al classpath per fare le cose. Buona fortuna

1
Roushan

Lo risolvo aggiungendo questa libreria: slf4j-simple-1.7.25.jar Puoi scaricarlo nel web ufficiale https://www.slf4j.org/download.html

1
Luis Manrique

So che questo post è un po 'vecchio, ma nel caso in cui qualcun altro si imbattesse in questo problema:

Aggiungi slf4j-jdk14-X.X.X.jar al tuo CLASSPATH (dove X.X.X è il numero di versione - ad esempio slf4j-jdk14-1.7.5.jar).

HTH Peter

0
midiman

Ecco i miei 5 centesimi ...

Ho avuto gli stessi problemi durante l'esecuzione dei test. Quindi l'ho risolto aggiungendo un'implementazione solo per il runtime di test. Sto usando gradle per questo progetto.

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

gruppo testRuntimeOnly: 'ch.qos.logback', nome: 'logback-classic', versione: '1.2.3'

0
Esteban

Io uso Jena e aggiungo la dipendenza di appartenenza a pom.xml

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

Provo ad aggiungere slf4j-simple ma semplicemente scompare l'errore "SLF4J: impossibile caricare la classe" org.slf4j.impl.StaticLoggerBinder "" ma logback-classic mostra più informazioni dettagliate.

Il documento ufficiale

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

Metti la dipendenza sopra menzionata nel file pom.xml

0
A.Dhami

la soluzione è indicata sul loro sito ufficiale:

Impossibile caricare la classe org.slf4j.impl.StaticLoggerBinder

Questo messaggio di avviso viene segnalato quando la classe org.slf4j.impl.StaticLoggerBinder non può essere caricata in memoria. Ciò si verifica quando non è possibile trovare il binding SLF4J appropriato sul percorso della classe. Inserire uno (e uno solo) di slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar o logback-classic.jar sul percorso della classe dovrebbe risolvere il problema. SINCE 1.6.0 A partire da SLF4J versione 1.6, in assenza di un binding, SLF4J imposterà un'implementazione del logger no-operation (NOP). Se si è responsabili del confezionamento di un'applicazione e non si preoccupa della registrazione, posizionando slf4j-nop.jar sul percorso della classe dell'applicazione si eliminerà questo messaggio di avviso. Si noti che i componenti incorporati come librerie o framework non devono dichiarare una dipendenza da alcun binding SLF4J ma dipendono solo da slf4j-api. Quando una libreria dichiara una dipendenza in fase di compilazione su un'associazione SLF4J, impone tale associazione all'utente finale, annullando in tal modo lo scopo di SLF4J.

soluzione: ho aggiunto al mio progetto usando la ricerca di maven su intellij e ho scelto slf4j-jdk14.jar.

0
Badr Bellaj

Per me il problema era: Usando Hibernate, ho visto che già utilizzava slf4j, ed era già nel mio classpath, quindi ho deciso di usarlo. Il prossimo passo: aggiungere imlementor per slf4j, quindi ho aggiunto a maven:

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

Ma ha fallito con l'errore! SLF4J: impossibile caricare la classe "org.slf4j.impl.StaticLoggerBinder"

La soluzione era: la dipendenza di Hibernate da slf4j era version 1.7.26 , e ho aggiunto una versione minore della dipendenza 1.7.25 . Quindi, quando ho risolto questo problema, tutto è diventato OK

0
JeSa

Molto probabilmente il tuo problema era dovuto a <scope>test</scope> (in alcuni casi anche <scope>provided</scope>), come menzionato @thangaraj .

Documentazione dice:

Questo ambito indica che la dipendenza non è richiesta per il normale utilizzo dell'applicazione ed è disponibile solo per le fasi di compilazione e di esecuzione del test. Le dipendenze del test non sono transitive e sono presenti solo per i percorsi di classe di test ed esecuzione.

Quindi, se non hai bisogno di dipendenze per scopi di test, puoi usare invece di (cosa vedrai 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>

Senza alcun ambito (per impostazione predefinita sarebbe ambito di compilazione quando non viene fornito altro ambito:

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

Questo è lo stesso di:

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