Moja aplikacja ma zostać wdrożona zarówno na tcServer, jak i WebSphere 6.1. Ta aplikacja korzysta z ehCache, a zatem wymaga slf4j jako zależności. W rezultacie dodałem jar slf4j-api.jar (1.6) do mojego pakietu plików wojennych.
Aplikacja działa dobrze w tcServer, z wyjątkiem następującego błędu:
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.
Jednak po wdrożeniu w WebSphere otrzymuję java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
.
Towarzyszy również Failed to load class "org.slf4j.impl.StaticMDCBinder"
Sprawdziłem ścieżki klas obu serwerów aplikacji i nie ma innego słoika slf4j.
Czy ktoś ma jakieś pomysły, co się tutaj dzieje?
Odpowiedzi:
Miałem ten sam problem z WebSphere 6.1. Jak zauważył Ceki, WebSphere używał wielu słoików, a jeden z nich wskazywał na starszą wersję slf4j.
Powrót do trybu no-op występuje tylko w przypadku slf4j -1.6+, więc cokolwiek starszego niż to spowoduje wyjątek i zatrzymuje wdrażanie.
Na stronie SLf4J znajduje się dokumentacja, która to rozwiązuje. Śledziłem to i dodałem
slf4j-simple-1.6.1.jar
do mojej aplikacji wraz zslf4j-api-1.6.1.jar
tym, co już miałem.To rozwiązało mój problem. Mam nadzieję, że pomoże to innym, którzy mają ten problem.
źródło
To jest dla tych, którzy przybyli tutaj z wyszukiwarki Google.
Jeśli używasz maven, po prostu dodaj następujące
Lub
źródło
slf4j-simple
nie należy używać tej samej wersjislf4j-api
? Prawdopodobnie działałyby dobrze razem, ale myślę, że bezpieczniej i ogólnie lepszą praktyką jest używanie tej samej wersji. Ponadto, jeśli chcesz włączyć rejestrowanie tylko na konsoli, na przykład podczas uruchamiania testów jednostkowych,slf4j-simple
wydaje się to wystarczające (chociaż było to dla mnie).Po prostu dodaj to do swojego pom.xml :
źródło
<groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
i problem został rozwiązanyTrzeba dodać następujący plik jar w ścieżce klas:
slf4j-simple-1.6.2.jar
. Jeśli go nie masz, pobierz go. Proszę odnieść się do http://www.slf4j.org/codes.html#multiple_bindingsźródło
jul-to-slf4j
w sobiepom.xml
i właśnie dodałemslf4j-simple
wcześniej i działa dobrze.Dość kilka odpowiedzi tutaj zaleca dodanie zależności slf4j-simple do pliku maven pom. Możesz sprawdzić najnowszą wersję.
Na https://mvnrepository.com/artifact/org.slf4j/slf4j-simple znajdziesz najnowszą wersję prostego wiązania SLF4J. Wybierz ten, który najbardziej Ci odpowiada (nadal 1.7.26 od 2019-02 jest stabilną wersją od 2019-07) i dołącz go do pliku pom.xml.
Dla Twojej wygody niektóre zależności są pokazane tutaj - ale mogą nie być aktualne, kiedy to czytasz!
Wersja alfa 2019-10
Wersja beta z lutego 2019 r
Wersja stabilna 2019-12
Usunąłem część testu zakresu dzięki komentarzowi poniżej.
źródło
<scope>test</scope>
? Z mojego doświadczenia wynika , że przynajmniej potrzebujęruntime
zakresu, aby upewnić się, żeslf4j-simple
jest na ścieżce klas. Ciekawe, jak to działa tylko ztest
Napotkałem ten sam błąd. Skonfigurowałem slf4j-api, slf4j-log4j12 i log4j w moim lokalnym rozwoju. Cała konfiguracja była w porządku, ale zależność slf4j-log4j12, którą skopiowałem z mvnrepository, miała zakres testowy
<scope>test</scope>
. Kiedy to usunąłem, wszystko jest w porządku.Czasami głupie błędy łamią nam głowę;)
źródło
Kiedyś powinniśmy zobaczyć notatkę z ostrzeżenia
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
.Możesz wyszukać przyczynę pojawienia się tego ostrzeżenia.
Dodanie jednego słoika z
*slf4j-nop.jar
,slf4j-simple.jar
,slf4j-log4j12.jar
,slf4j-jdk14.jar
lublogback-classic.jar*
na ścieżce klasy powinno rozwiązać ten problem.na przykład dodaj powyższy kod do swojego
build.gradle
lub odpowiedni kod dopom.xml
projektu maven.źródło
umieszczenie pliku
slf4j-log4j12-1.6.4.jar
w ścieżce klasy załatwi sprawę.źródło
Jeśli używasz maven do zarządzania zależnościami, możesz po prostu dodać następującą zależność w pom.xml
Dla użytkowników spoza Maven Wystarczy pobrać bibliotekę i umieścić ją w ścieżce klas projektu.
Tutaj możesz zobaczyć szczegóły: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/
źródło
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
Poszukaj komentarza sarxos, o którym wspomniał @Paul, aby dodać logback-classic. Działa także inne podejście do zmiany<artifactId>slf4j-simple</artifactId>
z<artifactId>slf4j-api</artifactId>
na. Jest to zilustrowane tutajSLF4j to abstrakcja dla różnych platform rejestrowania . Dlatego oprócz slf4j musisz dołączyć do ścieżki klas dowolną strukturę rejestrowania, taką jak log4j lub logback (itp.).
Aby mieć pomysł, zapoznaj się z Pierwszym krokiem dziecka w http://logback.qos.ch/manual/introduction.html
źródło
Slf4j jest fasadą dla podstawowych struktur rejestrowania, takich jak log4j, logback, java.util.logging.
Aby połączyć się z podstawowymi strukturami, slf4j używa powiązania.
Powyższy błąd jest zgłaszany, jeśli brakuje słoika do wiązania. Możesz pobrać ten słoik i dodać go do ścieżki klasy.
W przypadku zależności od maven
Ta zależność oprócz slf4j-log4j12-1.7.21.jar, spowoduje wciągnięcie slf4j-api-1.7.21.jar, a także log4j-1.2.17.jar do twojego projektu
Odniesienie: http://www.slf4j.org/manual.html
źródło
Miałem podobny problem z aplikacjami Spring-boot-2 z biblioteką Java 9.
Dodanie następującej zależności w pliku pom.xml rozwiązało problem:
źródło
W przypadku Websphere masz starszą wersję slf4j-api.jar, 1.4.x. lub 1.5.x leżąc gdzieś. Zachowanie, które obserwujesz na tcServer, czyli przełączenie awaryjne na NOP, występuje w wersji slf4j 1.6.0 i nowszych. Upewnij się, że używasz slf4j-api-1.6.x.jar na wszystkich platformach i że żadna starsza wersja slf4j-api nie jest umieszczona na ścieżce klasy.
źródło
Wpadłem w ten problem, gdy pojawia się następujący błąd:
kiedy używałem
slf4j-api-1.7.5.jar
w swoimlibs
.Pomimo Próbowałem z całych sugerowanych słoików dopełniacza, jak
slf4j-log4j12-1.7.5.jar
,slf4j-simple-1.7.5
komunikat o błędzie nadal trwało. Problem został ostatecznie rozwiązany, gdy dodałemslf4j-jdk14-1.7.5.jar
biblioteki Java.Pobierz cały pakiet slf4j ze strony http://www.slf4j.org/download.html
źródło
Dodaj następujące zależności do pom, aby rozwiązać ten problem.
źródło
Jako alternatywę dla włączenia słoika i rozwiązań czystego maven, możesz dołączyć go z maven z gradle.
Przykład dla wersji
1.7.25
Umieść to w zależnościach twojego
build.gradle
pliku.źródło
Pracuję w projekcie Struts2 + Spring. Więc potrzebuje zależności
slf4j-api-1.7.5.jar
.Jeśli uruchamiam projekt, pojawia się błąd
Nie udało się załadować klasy „org.slf4j.impl.StaticLoggerBinder”
Rozwiązałem mój problem, dodając
slf4j-log4j12-1.7.5.jar
.Dodaj ten słoik do swojego projektu, aby rozwiązać problem.
źródło
Jak stwierdza instrukcja SLF4J
i
Więc powinieneś wybrać, które wiązanie chcesz zastosować.
Wiązanie NoOp (slf4j-nop)
Sprawdź nową wersję na https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav
Proste wiązanie (slf4j-simple)
Sprawdź nową wersję na https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav
Wiązania dla środowisk rejestrowania (java.util.logging, logback, log4j)
Potrzebujesz jednego z tych powiązań, jeśli chcesz zapisać dziennik w pliku.
Zobacz opis i instrukcje na https://www.slf4j.org/manual.html#projectDep
Moja opinia
Polecam Logback, ponieważ jest następcą log4j projektu.
Sprawdź najnowszą wersję powiązania na https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav
Otrzymujesz wyjście konsoli po wyjęciu z pudełka, ale jeśli chcesz zapisać logi do pliku, po prostu ustaw
FileAppender
konfigurację wsrc/main/resources/logback.xml
lub wsrc/test/resources/logback-test.xml
następujący sposób:(Zobacz szczegółowy opis w instrukcji: https://logback.qos.ch/manual/configuration.html )
źródło
Umieść wyżej wspomnianą zależność w pliku pom.xml
źródło
Dodałem tę zależność, aby rozwiązać ten problem:
źródło
Według oficjalnej dokumentacji SLF4J
Po prostu dodaj ten słoik wraz z plikiem slf4j api.jar do ścieżki klasy, aby załatwić sprawę. Powodzenia
źródło
Rozwiązuję go, dodając tę bibliotekę: slf4j-simple-1.7.25.jar Możesz pobrać to w oficjalnej witrynie https://www.slf4j.org/download.html
źródło
napotkał ten sam problem na payara 5.191
jcl-over-slf4j wraz z slf4j-log4j12 rozwiązały problem
źródło
Wiem, że ten post jest trochę stary, ale na wypadek, gdyby ktoś napotkał ten problem:
Dodaj slf4j-jdk14-XXXjar do CLASSPATH (gdzie XXX to numer wersji - np. Slf4j-jdk14-1.7.5.jar).
HTH Peter
źródło
Używam Jeny i dodaję zależność od innych do pom.xml
Próbuję dodać slf4j-simple, ale po prostu znikam błąd „SLF4J: Nie udało się załadować klasy„ org.slf4j.impl.StaticLoggerBinder ””, ale logback-classic pokazuje więcej szczegółowych informacji.
Oficjalny dokument
źródło
rozwiązanie jest wskazane na ich oficjalnej stronie internetowej:
rozwiązanie: Dodałem do mojego projektu, korzystając z badań maven nad intellij, i wybrałem plik slf4j-jdk14.jar.
źródło
Najprawdopodobniej twój problem był z powodu
<scope>test</scope>
(w niektórych przypadkach również<scope>provided</scope>
), jak wspomniano @thangaraj .Dokumentacja mówi:
Jeśli więc nie potrzebujesz zależności do celów testowych, możesz użyć zamiast tego (co zobaczysz w mvnrepository ):
Bez żadnych zakresów (domyślnie byłby to zakres kompilacji, gdy nie podano innego zakresu):
To jest to samo co:
źródło
Oto moje 5 centów ...
Miałem te same problemy podczas uruchamiania testów. Naprawiłem to, dodając implementację tylko do testowego środowiska uruchomieniowego. Używam gradle do tego projektu.
źródło
Dla mnie problemem było: Używając Hibernacji, zobaczyłem, że już używał slf4j i już był w mojej ścieżce klas, więc postanowiłem go użyć. Kolejny krok - dodanie imlementora do slf4j, więc dodałem do maven:
Ale zawiodło z błędem! SLF4J: Nie udało się załadować klasy „org.slf4j.impl.StaticLoggerBinder”
Rozwiązaniem było: Zależność Hibernacji od slf4j była w wersji 1.7.26 , a ja dodałem niewielką zależność od wersji 1.7.25 . Więc kiedy to naprawiłem - wszystko stało się OK
źródło
Nie dodałem żadnych zależności, po prostu zmieniłem sposób, w jaki je konsumowałem.
Kod podglądu
(Usuń komentarz z tego kodu, jeśli korzystasz z wyszukiwania elastycznego w wersji <7.0)
Aktualny kod
Korzystam z Bulkrequest i usuwam ten błąd.
źródło