SLF4J: nie udało się załadować klasy „org.slf4j.impl.StaticLoggerBinder”. błąd


115
  • Odnośnie Eclipse IDE ( Indigo , Juno i Kepler (wersje 32 i 64 bitowe))
  • Platformy : Windows , Ubuntu , Mac
  • wersja m2e : 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 ,
    1.4.0.20130601-0317

Ogólne informacje

Powyższy błąd pojawił się po aktualizacji m2e do wersji 1.1. Po usunięciu m2e 1.1 i przywróceniu m2e 1.0 wszystko działało dobrze. Próbowałem powtórzyć problem w systemie Windows i Ubuntu i dało mi to dokładnie ten sam błąd. Przetestowano wiele konfiguracji slf4j-api i logback, ale żadna z nich nie działa.

Błąd pojawia się w każdym projekcie maven nawet bez deklarowania zależności slf4j .

  • Nowy projekt Maven -> maven-archetype-quickstart

    i

  • New Maven Project -> Prosty projekt bez wyboru archetypu

    wynik do

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

Środowiska testowe i konfiguracje

Testowane z Eclipse Indigo i Eclipse Juno (zarówno 32-bitowe, jak i 64-bitowe) na komputerach Mac, 32-bitowe w systemie Ubuntu oraz 64 i 32-bitowe w systemie Windows. Przetestowano nowe instalacje Juno Classic , narzędzi Juno Modeling , Kepler Standard , Kepler Modeling Tools i wygenerowałem ten sam błąd.

Błąd pojawia się przy czyszczeniu , instalowaniu , testowaniu , wdrażaniu , generowaniu źródeł , sprawdzaniu poprawności , kompilowaniu , pakowaniu , testowaniu integracji , weryfikacji i kombinacjach celu czystego z pozostałymi celami. Występuje również z parametrami -e i -X . Podjęto próbę usunięcia repozytorium m2e i pobrania go od zera, ale ponownie bez powodzenia. Powinienem wspomnieć, że został przetestowany na 3 różnych maszynach i wirtualnym pudełku we wszystkich powyższych systemach, ale spowodował ten sam błąd.

Wypróbowano wszystkie różne konfiguracje logowania zwrotnego (od 1.0.4 do 1.0.13), które rozwiązują zależności slf4j-api i logback-core , ale wszystkie powodują ten sam błąd:

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

Wypróbowałem wszystkie różne (od 1.6.1 do 1.7.5) konfiguracje slf4j-simple .

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

Wypróbowano wszystkie różne (od 1.6.1 do 1.7.5) konfiguracje log4j-over-slf4j .

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

Wypróbowałem wszystkie różne (od 1.6.1 do 1.7.5) konfiguracje slf4j-jdk14 .

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

Wypróbowano wszystkie różne (od 1.6.1 do 1.7.5) konfiguracje slf4j-log4j12 .

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

Wypróbowana konfiguracja slf4j-nop 1.7.5 .

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.5</version>
  <scope>compile</scope>
</dependency>

Co nie mniej ważne, dzienniki są zapisywane i drukowane pomimo błędu.


Sposoby odtworzenia błędu

  • Pobierz Eclipse Juno, Indigo lub Kepler 32 lub 64 bit (wszystkie instalacje spowodują ten sam błąd).

  • Kliknij prawym przyciskiem myszy projekt -> Uruchom jako -> czysta instalacja (lub inny cel wymieniony powyżej)

Pierwsza linia konsoli to

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.

PS Istniejące projekty spowodują ten sam błąd po aktualizacji wersji m2e do 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 , 1.4.0.20130601-0317


Aktualizacje

EDYTOWAĆ

Strona wsparcia m2e:

  • Powyższe pytanie zostało opublikowane jako błąd na stronie wsparcia m2e i odpowiedź Igora Fedorenko była taka

    Nie ma bezpośrednich planów usunięcia tej wiadomości.

    Aby wyświetlić powyższy błąd, odwiedź oficjalną stronę pomocy m2e


EDYCJA 2

  • Powyższe wskazanie błędu występuje również w m2e w wersji 1.2.0.20120903-1050


EDYCJA 3

  • Powyższe wskazanie błędu występuje również w m2e w wersji 1.3.0.20130129-0926


EDYCJA 4

  • Powyższe wskazanie błędu występuje również w m2e w wersji 1.4.0.20130601-0317


EDYCJA 5

                              ***Reported FIXED***
  • Powyższy błąd jest zgłaszany jako naprawiony dla m2e w wersji 1.5.0 / Luna M3 ( docelowy kamień milowy ). Wersja nie jest jeszcze dostępna do pobrania.
  • Luna M3 jest zaplanowana na 15 listopada .
  • Najnowsza wersja deweloperska jest dostępna tutaj
  • Więcej informacji o kamieniach milowych m2e można znaleźć w głównym repozytorium m2e .

@EliranMalka To długo, ale nie bez powodu. Próba pomocy ludziom w unikaniu zadawania tych samych pytań i uwzględnieniu wszystkich szczegółów, które mogą wydawać się konieczne, aby zrozumieć, czy mają ten sam problem, nie pozwoliła mi na zbyt wiele wyborów. :-)
Konstantinos Margaritis

Otrzymałem ten błąd podczas próby użycia danych wiosennych z neo4j, które mam slf4jw obu slf4j-api-1.7.7i jcl-over-slf4j-1.7.7jeśli próbuję usunąć którekolwiek z nich, pojawia się komunikat o błędzie informujący, że Loggerbrakuje ich klasy. Co powinienem zrobić?
user1885868

@KonstantinosMargaritis czy możesz powiedzieć, jak to naprawić za pomocą pom.xml, mógłbym sprawić, by działał na lokalnej konfiguracji, ale na jenkins zawsze zawodzi.
vikramvi

Jaka jest Twoja obecna konfiguracja @vikramvi?
Konstantinos Margaritis

@KonstantinosMargaritis dzięki za powrót do tego. Zdałem sobie sprawę, że maven to wersja 3.0 na Linuksie zaktualizowana do najnowszej wersji i spróbowałem ponownie. to rozwiązało problem. Ale musiał spędzić cały dzień, próbując dowiedzieć się, co może być nie tak. W każdym razie dzięki.
vikramvi

Odpowiedzi:


75

Mogę również potwierdzić ten błąd.

Obejście: polega na użyciu zewnętrznego mavena wewnątrz m2eclipse zamiast jego osadzonego mavena.

Odbywa się to w trzech krokach:

1 Zainstaluj mavena na komputerze lokalnym ( maszyną testową był Ubuntu 10.10)

mvn --version

Apache Maven 2.2.1 (rdebian-4) Wersja Java: 1.6.0_20 Strona główna Java: / usr / lib / jvm / java-6-openjdk / jre Domyślne ustawienie regionalne: de_DE, kodowanie platformy: UTF-8 Nazwa systemu operacyjnego: „linux” wersja: "2.6.35-32-generic" arch: "amd64" Rodzina: "unix"

2 Uruchom mavena z zewnętrznym łączem, jak uruchomić mavena z konsoli

> cd path-to-pom.xml
> mvn test
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Simple
    [INFO]    task-segment: [test]
    [INFO] ------------------------------------------------------------------------
    [...]
    [INFO] Surefire report directory: [...]/workspace/Simple/target/surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running net.tverrbjelke.experiment.MainAppTest
    Hello World
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.042 sec
    
    Results :
    
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [...]

3 wewnątrz m2eclipse: przełącz się z wbudowanego mavena na lokalny maven

  • dowiedz się, gdzie jest lokalny katalog instalacji domu maven ( mvn --versionlub google dla ciebie MAVEN_HOME, dla mnie to pomogło mi to znaczy /usr/share/maven2)
  • w eclipse Menu-> Window-> Preferences-> Maven-> Installation-> wprowadź ten ciąg. W takim razie powinieneś był przełączyć się na nowego zewnętrznego mistrza.
  • następnie uruchom swój projekt jako np. „maven test”.

Komunikat o błędzie powinien zniknąć.


1
Przyjmuję twoją odpowiedź, ponieważ jest to jedyne obejście tego irytującego błędu. Bardzo dziękuję za analityczną odpowiedź. :) ..
Konstantinos Margaritis

3
hmm jestem na Windowsie i zmieniłem na nowe zewnętrzne instalacje, jednak błąd nadal istnieje !?
stefan.at.wpf

4
przepraszam, to działa. Zwróć uwagę, że istnieje opcja dla środowiska uruchomieniowego maven (wewnętrzne / zewnętrzne) w konfiguracjach uruchamiania. więc jeśli używasz zapisanego, pamiętaj, aby go zaktualizować.
stefan.at.wpf

@ stefan.at.wpf Dobrze słyszeć, że to działa. Jeśli chcesz, możesz zapisać się na listę mailingową błędu i otrzymać informację, jeśli coś się zmieni.
Konstantinos Margaritis

2
Dla mnie #mvn --versionwygodnie jest pokazać MAVEN_HOME.
biaobiaoqi

25

W witrynie SLf4J znajduje się dokumentacja, aby rozwiązać ten problem. Poszedłem za tym i dodałem slf4j-simple-1.6.1.jar do mojej aplikacji wraz z slf4j-api-1.6.1.jar, który już miałem. To rozwiązało mój problem

slf4j


4
to działa, w maven można dodać: <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-simple </artifactId> <version> 1.XX </version> </dependency> // Po prostu zamień na twoja wersja
Enrique San Martín

@Mohammed Irfan Czy mogę potrzebować dodać ten plik twojar w folderze libs w eclipse?
Erum

1
Używam późniejszej wersji Mavena i wykonałem powyższe kroki, ale to była odpowiedź, która spowodowała, że ​​problem zniknął - dzięki :)
Rob Wilson

15

Jeśli używasz Gradle, dodaj to:

dependencies { 
... 
compile "org.slf4j:slf4j-simple:1.7.9" 
... 
}

Działa tutaj z Gradle !! Czy możesz wyjaśnić, co się stanie, gdy dodamy tę bibliotekę?
Felipe Pereira,

5

Wystąpił podobny błąd z tym samym wynikiem z Gradle i był w stanie rozwiązać go, wykonując następujące czynności:

//compile 'org.slf4j:slf4j-api:1.7.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.1'

Linia bez komentarza to ta, która spowodowała błąd. Wierzę, że możesz to przenieść do Mavena.


3

Nie
podałeś wersji w swoim pliku zależności maven, być może dlatego nie wybiera najnowszego pliku jar. Potrzebujesz też innej zależności z slf4j-log4j12identyfikatorem artefaktu.
Uwzględnij to w swoim pliku pom

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

Daj mi znać, jeśli błąd nadal nie został rozwiązany.
Polecam również wyświetlenie tego linku


3
Wszystkie podane wersje zostały sprawdzone. Nie zadeklarowałem tego tam, aby uniknąć powtórzeń. Znacznik celowo pozostawiono pusty. Proszę zauważyć, że powyższy problem został opublikowany jako błąd na stronie wsparcia m2e i nie ma sposobu na rozwiązanie powyższego błędu, chyba że zostanie on usunięty przez programistów m2e. Przeczytałem tę witrynę wiele razy i zamieściłem wszystkie możliwe biblioteki, które mogłyby rozwiązać problem. Niestety żadna konfiguracja nie zadziałała, ponieważ dotyczy raczej m2e niż zadeklarowanych zależności. Powyższy błąd nie jest wyświetlany w konsoli maven ani w Netbeans, TYLKO w Eclipse.
Konstantinos Margaritis

1
slf4j-log4j12 to kolejne powiązanie wraz z slf4j-simple, slf4j-jdk14 i logback-classic. Każda z powyższych zależności powinna rozwiązać problem z wiązaniem. Jak wyjaśniłem wcześniej, problem dotyczy m2e. W każdym razie dzięki.
Konstantinos Margaritis,

3

Wklej ten kod do pliku pom.xml. Mi to pasuje.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>

Rozwiązuje błąd „org.slf4j.impl.StaticLoggerBinder”, ale teraz rejestruję wszystko, umieszczam log4j.xml i log4j.properties (pojedynczo) w src / test / resources, teraz wszystkie frameworki w moim projekcie są rejestrowane mnóstwo wiadomości poza moimi własnymi logami.
OJVM

1

Przeszukał problem, gdy go ujawnił. Uwierz, że będzie to dobra lektura dla innych, którzy przychodzą tutaj z tym samym problemem:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=387064


podaj pełną odpowiedź, a nie tylko link.
slfan

@Prince Jeśli czytasz opis pytania, możesz znaleźć część, która mówi "Aby zobaczyć powyższy błąd, odnieś się do oficjalnej strony pomocy m2e", która wskazuje na adres URL, o którym wspomniałeś.
Konstantinos Margaritis

Ups ... Moja wina. Szczere przeprosiny!
Prince

1

Miałem podobny problem z moją aplikacją Spring Boot - Gradle działającą na Eclipse Luna. Mogłem rozwiązać ten problem, ręcznie dodając wpis do ścieżki .classpath mojego projektu

<classpathentry sourcepath="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/3150039466ad03e6ef1c7ec1c2cbb0d96710cf64/slf4j-simple-1.7.7-sources.jar" kind="lib" path="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/8095d0b9f7e0a9cd79a663c740e0f8fb31d0e2c8/slf4j-simple-1.7.7.jar"/>

Chodzi o to, aby zastosować to rozwiązanie. Ale sposób wdrożenia zależy od przypadku. Jednym ze sposobów mocowania jest ten, którego użyłem powyżej.

Mam nadzieję że to pomoże.


0

To nie jest komunikat o błędzie, ale ostrzeżenie. Na ich stronie internetowej jest to bardzo jasno wyjaśnione jako:

To ostrzeżenie, tj. Komunikat nie jest błędem, jest zgłaszane, gdy nie można znaleźć dostawców SLF4J na ścieżce klasy. Umieszczenie jednego (i tylko jednego) pliku slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar lub logback-classic.jar na ścieżce klas powinno rozwiązać problem. Pamiętaj, że ci dostawcy muszą kierować reklamy na slf4j-api 1.8 lub nowszy.

W przypadku braku dostawcy SLF4J będzie domyślnie dostawcą rejestratora braku operacji (NOP).

https://www.slf4j.org/codes.html#StaticLoggerBinder


0

Miałem ten sam problem pisząc program producenta Kafki przy użyciu javy. Ten błąd występuje z powodu niewłaściwej biblioteki slf4j. użyj poniżej zależności slf4j-simple maven, która naprawi twój problem.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.