2013-08-19 14 views
8

Czy ktoś może mi powiedzieć, różnica między slf4j-log4j i log4j-over-slf4j? Które ustawienie jest bardziej standardowe w aplikacji internetowej Java? Obecnie mam obie ścieżki classpath i powoduje to wyjątek środowiska wykonawczego, ponieważ serwer WWW próbuje zapobiec wystąpieniu StackOverFlowException.java.lang.IllegalStateException: Wykryto zarówno log4j-over-slf4j.jar, jak i slf4j-log4j12.jar na klasie pat

Wyjątek:

java.lang.IllegalStateException:
wykryto zarówno log4j-over-slf4j.jar I slf4j-log4j12.jar na ścieżce klasy

+1

Usuwanie zarówno byłby niezły pomysł. –

+1

i wymienić na? – c12

+0

Proponuję, aby zbadać zawartość obu i dowiedzieć się, jak są różne. –

Odpowiedz

20

slf4j-log4j korzysta log4j jako implementacja slf4j.

log4j-over-slf4j powoduje, że wywołania funkcji API log4j są kierowane do slf4j.

You cannot use both of these JAR's at the same time.

Oba są ważne biblioteki w użyciu i są równie „norma”, to zależy od projektu.

Ogólnie, jeśli twój projekt już używa log4j i nie masz możliwości uaktualnienia wszystkich loggerów log4j do rejestratorów slf4j; log4j-over-slf4j jest szybką poprawką, która umożliwia natychmiastowe rozpoczęcie używania slf4j.

Jednakże, jeśli twój projekt jest nowy lub nie ma istniejącego mechanizmu rejestrowania i zdecydujesz się użyć slf4j, slf4j-log4j byłby dobrym rozwiązaniem, ponieważ określa tylko, czy slf4j powinien być powiązany z log4j.

Biorąc to pod uwagę, zgadzam się z komentarzem c12. Przestań używać log4j i zamiast tego użyj slf4j i logback.

+0

Idealnie poprawna i kompletna odpowiedź –

+0

Chociaż twoja odpowiedź doskonale mnie uratowała, dziękuję! Ale posiadanie wyłączności w maju wygląda trochę na hakowanie. Czy istnieje ogólna definicja maven, aby zastosować wykluczenie we wszystkich podstawach? – Sankalp

+1

@Sankalp Czy pytasz [Czy istnieje sposób na globalne wykluczenie zależności Maven?] (Http://stackoverflow.com/q/4716310/953327) – FGreg

2

w moim projekcie, org.slf4j.impl.Log4jLoggerFactory jest w

activemq-all-5.7.0.jar 
nie

w slf4j-log4j12.jar

komunikat wyjątek błąd mi