SLF4J: Nie udało się załadować klasy „org.slf4j.impl.StaticLoggerBinder”


619

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?


Ten artykuł rozwiązał mój problem
Księgowy م

Odpowiedzi:


517

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.jardo mojej aplikacji wraz z slf4j-api-1.6.1.jartym, co już miałem.

To rozwiązało mój problem. Mam nadzieję, że pomoże to innym, którzy mają ten problem.


4
Tak, błąd idzie tak, jak wspomniano tutaj - slf4j.org/manual.html Ale dostaję teraz nowy błąd - Spowodowany przez: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
David Blaine

1
„Jak zauważył Ceki, WebSphere używał wielu słoików, a jeden z nich wskazywał na starszą wersję slf4j”. - Tyle o Maven dbającym o zależności! Co za żart.
AndroidDev,


2
Korzystam z wersji 1.7 i mam ten sam problem. Dodałem slf4j-simple-1.7.jar i teraz problem został rozwiązany.
littletiger

1
To mi nie działa. Słoik SLF4J-simple nie odbiera pliku log4j.properties. Zamiast tego używam implementacji, dodając slf4j-log4j12 i log4j jar, co działa dobrze dla mnie.
flyrain

379

To jest dla tych, którzy przybyli tutaj z wyszukiwarki Google.

Jeśli używasz maven, po prostu dodaj następujące

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

Lub

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

1
Czy istnieje powód, dla którego slf4j-simplenie należy używać tej samej wersji slf4j-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-simplewydaje się to wystarczające (chociaż było to dla mnie).
Ivaylo Slavov

22
AFAIK powinieneś mieć tylko 1 implant slf4j, tzn. Albo slf4j-log4j12 LUB slf4j-simple, a nie oba.
Ondra Žižka

@Igor KatKov działa to tylko na komputerze lokalnym, ale uzyskanie tego samego błędu na Jenkinsie nie jest pewne, co się dzieje. czy możesz wyjaśnić
vikramvi

slf4j-api wymaga konfiguracji, która nie jest dostępna przy pierwszym uruchomieniu (i nie edytowała żadnych plików konfiguracyjnych). Użycie slf4j-simple pozwoli ci korzystać z podstawowego Loggera bez konfigurowania żadnych plików oprócz WYSIWYG. Następnie możesz powrócić do slf4j-api, gdy nauczysz się konfigurować pliki i dostosowywać wyjście Logger tak, jak chcesz. (Wciąż uczę się, gdzie są i jak je edytować)
rozdziały

53

Po prostu dodaj to do swojego pom.xml :

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

3
Rozwiązanie zadziałało dla mnie; Warto wskazać dokumentację (w której znalazłem wyjaśniony błąd): slf4j.org/codes.html#StaticLoggerBinder
Witold Kaczurba

2
nic innego, ale to zadziałało dla mnie podczas uruchamiania prostego przykładu producenta kafki. wielkie dzięki!
Viren,

@WitoldKaczurba ma rację. Miałem ten sam problem podczas używania zależności za pomocą maven. Właśnie przejrzałem Google'a i poszedłem do slf4j.org/codes.html#StaticLoggerBinder, w którym podano problem i jego rozwiązanie. Użyłem slf4j-api w wersji 1.7.25. Po sprawdzeniu dokumentacji wspomnianego linku właśnie użyłem <zależności> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>i problem został rozwiązany
Mohammad Anas

Nie rozumiem sensu używania Maven, jeśli biblioteki, które potrzebują jakiegoś loggera (np. Kierownica, która potrzebuje slf4j) nie deklarują tego w pom. W każdym razie dziękuję.
Eric Duminil

W moim przypadku nie jest to rozwiązanie. To tylko ukrywanie informacji, że istnieją niekompatybilne wersje slf4j i log4j lub innej wtyczki.
hariprasad

42

Trzeba 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


Ale nie mam tego słoika na ścieżce klas tcServer, co mnie dezorientuje. Nie rozumiem, jak nie potrzebuję dodatkowego słoika w tcServer, ale robię to w WebSphere
JJ180,

1
Pracował dla mnie i znacznie prostszy niż zaakceptowana odpowiedź. Wersja 1.7.7 również działała.
La-comadreja

1
Miałem już jul-to-slf4jw sobie pom.xmli właśnie dodałem slf4j-simplewcześniej i działa dobrze.
slugmandrew

Jak po prostu dodać plik jar do ścieżki klasy?
Dean013

Czy możesz mi wyjaśnić, jaka jest ścieżka zajęć? gdzie jest? Nie rozumiem
Rose8525

36

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

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>2.0.0-alpha1</version>
 </dependency>

Wersja beta z lutego 2019 r

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

Wersja stabilna 2019-12

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

Usunąłem część testu zakresu dzięki komentarzowi poniżej.


6
dlaczego używacie <scope>test</scope>? Z mojego doświadczenia wynika , że przynajmniej potrzebuję runtimezakresu, aby upewnić się, że slf4j-simplejest na ścieżce klas. Ciekawe, jak to działa tylko z test
lunetą

Dziękujemy za zwrócenie na to uwagi. Odpowiednio usunąłem tag zakresu z mojej odpowiedzi. To był problem z wycinaniem i wklejaniem - link, który dostarczam, zapewnia w ten sposób zależność od wersji beta.
Wolfgang Fahl

27

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ę;)


1
Stukrotne dzięki! Znalazłem ten sam problem i miałem go porzucić, dopóki nie znalazłem twojego postu!
Ergodyne,

1
Pomogło mi to również
cod3min3

27

Kiedyś powinniśmy zobaczyć notatkę z ostrzeżenia SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details..

Dzieje się tak, gdy nie można znaleźć odpowiedniego powiązania SLF4J na ścieżce klasy

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.jarlub logback-classic.jar*na ścieżce klasy powinno rozwiązać ten problem.

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

na przykład dodaj powyższy kod do swojego build.gradlelub odpowiedni kod do pom.xmlprojektu maven.


15

umieszczenie pliku slf4j-log4j12-1.6.4.jarw ścieżce klasy załatwi sprawę.


6
lub dodaj zależność do swojej pom <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-log4j12 </artifactId> </dependency>
enkor

11

Jeśli używasz maven do zarządzania zależnościami, możesz po prostu dodać następującą zależność w pom.xml

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

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/


1
Również dla użytkowników maven odkryłem, że muszę dodać następujące elementy do pliku pom.xml, który również automatycznie uruchamia logback-core: <niezależność> <groupId> ch.qos.logback </groupId> <artifactId> logback-classic </ artifactId> <version> 1.0.9 </version> </dependency>
Paul

2
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 tutaj
Abhijeet,

10

SLF4j 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


2
Dodanie logback naprawiło to dla mnie. Wrzuciłem najnowszą wersję logback do pom (1.1.7) i to się nie udało, ponieważ zależność slf4j była za stara (1.6.2). Obniżenie logback do 1.0.0 i pozostawienie slf4j na 1.6.x działało, podobnie jak uaktualnienie slf4j do 1.7.20 i pozostawienie logback na 1.1.7.
ECDragon,

5

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.

  • log4j - slf4j-log4j12-1.7.21.jar
  • java.util.logging - slf4j-jdk14-1.7.21.jar itp

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

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

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


Twoje rozwiązanie było dla mnie jedyne, dziękuję!
Edenshaw,

5

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:

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

4

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.


Dzięki, sprawdziłem ścieżkę klasy WebSphere 6.1 i nie widzę żadnej innej wersji slf4j, np. Przeszukałem w systemie plików WebSphere jar slf4j i otrzymałem tylko wersję 1.6. Czy wiesz, czy WebSphere jest dostarczany z pakietem slf4j?
JJ180,

Wszystko jest możliwe, ale byłbym bardzo zaskoczony, gdyby WebSphere był dostarczany z pakietem slf4j-api. Pakiety spawów slf4j-api.jar. Czy używasz Weld?
Ceki,

4

Wpadłem w ten problem, gdy pojawia się następujący błąd:

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.

kiedy używałem slf4j-api-1.7.5.jarw 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.5komunikat o błędzie nadal trwało. Problem został ostatecznie rozwiązany, gdy dodałem slf4j-jdk14-1.7.5.jarbiblioteki Java.

Pobierz cały pakiet slf4j ze strony http://www.slf4j.org/download.html


4

Dodaj następujące zależności do pom, aby rozwiązać ten problem.

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

Właśnie zawarłem pierwszą zależność - jak wskazano w innej odpowiedzi - i działa. Obie zależności nie rozwiązują dla mnie problemu.
RubioRic

I chcesz użyć lokalnego maven zamiast dołączonego maven firmy Intellij.
Abdul Gaffar,

4

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

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

Umieść to w zależnościach twojego build.gradlepliku.


3

Pracuję w projekcie Struts2 + Spring. Więc potrzebuje zależnościslf4j-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.


3

Jak stwierdza instrukcja SLF4J

Simple Logging Facade for Java (SLF4J) służy jako prosta fasada lub abstrakcja dla różnych struktur rejestrowania, takich jak java.util.logging, logback i log4j.

i

Ostrzeżenie zniknie, gdy tylko dodasz powiązanie do ścieżki klasy.

Więc powinieneś wybrać, które wiązanie chcesz zastosować.

Wiązanie NoOp (slf4j-nop)

Wiązanie dla NOP, po cichu odrzucając wszystkie rejestrowanie.

Sprawdź nową wersję na https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav

Proste wiązanie (slf4j-simple)

wysyła wszystkie zdarzenia do System.err. Drukowane są tylko wiadomości o poziomie INFO i wyższym. Wiązanie to może być przydatne w kontekście małych aplikacji.

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 FileAppenderkonfigurację w src/main/resources/logback.xmllub w src/test/resources/logback-test.xmlnastępujący sposób:

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

(Zobacz szczegółowy opis w instrukcji: https://logback.qos.ch/manual/configuration.html )


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

Umieść wyżej wspomnianą zależność w pliku pom.xml


Pamiętaj jednak, aby sprawdzić najnowszą wersję.
user1053510,

2

Dodałem tę zależność, aby rozwiązać ten problem:

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

1

Według oficjalnej dokumentacji SLF4J

Nie udało się załadować klasy org.slf4j.impl.StaticLoggerBinder

Ten komunikat ostrzegawczy jest zgłaszany, gdy klasa org.slf4j.impl.StaticLoggerBinder nie mogła zostać załadowana do pamięci. Dzieje się tak, gdy nie można znaleźć odpowiedniego powiązania 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 klasy powinno rozwiązać problem.

Po prostu dodaj ten słoik wraz z plikiem slf4j api.jar do ścieżki klasy, aby załatwić sprawę. Powodzenia



1

napotkał ten sam problem na payara 5.191

jcl-over-slf4j wraz z slf4j-log4j12 rozwiązały 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>

0

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


1
Czy sugerujesz, aby użytkownicy powrócili do logowania JDK1.4, aby rozwiązać problem ścieżki klas? Zobacz także ten wpis w FAQ: slf4j.org/faq.html#need_to_recompile
mwhs

0

Używam Jeny i dodaję zależność od innych do pom.xml

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

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


0

rozwiązanie jest wskazane na ich oficjalnej stronie internetowej:

Nie udało się załadować klasy org.slf4j.impl.StaticLoggerBinder

Ten komunikat ostrzegawczy jest zgłaszany, gdy klasa org.slf4j.impl.StaticLoggerBinder nie mogła zostać załadowana do pamięci. Dzieje się tak, gdy nie można znaleźć odpowiedniego powiązania 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 klasy powinno rozwiązać problem. OD wersji 1.6.0 SLF4J od wersji 1.6, przy braku powiązania, SLF4J domyślnie implementuje rejestrator braku operacji (NOP). Jeśli jesteś odpowiedzialny za pakowanie aplikacji i nie przejmujesz się logowaniem, to umieszczenie pliku slf4j-nop.jar na ścieżce klasy aplikacji pozbędzie się tego komunikatu ostrzegawczego. Zauważ, że komponenty osadzone, takie jak biblioteki lub frameworki, nie powinny deklarować zależności od żadnego powiązania SLF4J, ale zależą tylko od slf4j-api.

rozwiązanie: Dodałem do mojego projektu, korzystając z badań maven nad intellij, i wybrałem plik slf4j-jdk14.jar.


0

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:

Ten zakres wskazuje, że zależność nie jest wymagana do normalnego użytkowania aplikacji i jest dostępna tylko dla faz kompilacji testów i wykonywania. Zależności testowe nie są przechodnie i są obecne tylko dla ścieżek klas testowania i wykonywania.

Jeśli więc nie potrzebujesz zależności do celów testowych, możesz użyć zamiast tego (co zobaczysz w 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>

Bez żadnych zakresów (domyślnie byłby to zakres kompilacji, gdy nie podano innego zakresu):

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

To jest to samo co:

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

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:

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

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


0

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)

IndexRequest indexRequest = new IndexRequest(
  "twitter",
  "tweets",
  id // this is to make our consumer idempotent
).source(record.value(), XContentType.JSON);

Aktualny kod

IndexRequest indexRequest = new IndexRequest("tweets")
  .source(record.value(), XContentType.JSON)
  .id(id); // this is to make our consumer idempotent

Korzystam z Bulkrequest i usuwam ten błąd.

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.