2013-08-19 2 views
8

Kann mir jemand den Unterschied zwischen Slf4j-Log4j und Log4j-über-Slf4j sagen? Welcher Standard wird in einer Java-Webanwendung standardmäßig verwendet? Ich habe derzeit beide auf dem Klassenpfad und das verursacht eine Laufzeitausnahme, da der Webserver versucht, eine StackOverFlowException zu verhindern.java.lang.IllegalStateException: Erkannt sowohl log4j-über-slf4j.jar UND slf4j-log4j12.jar in der Klasse pat

Ausnahme:

java.lang.IllegalStateException:
Erkannt beide log4j-over-slf4j.jar UND slf4j-log4j12.jar auf dem Classpath

+1

beide eine nette Idee wäre entfernen. –

+1

und ersetzen durch? – c12

+0

Ich würde vorschlagen, dass Sie den Inhalt von beiden untersuchen und herausfinden, wie sie unterschiedlich sind. –

Antwort

20

slf4j-log4j verwendet log4j als eine Implementierung von slf4j.

log4j-over-slf4j bewirkt, dass Aufrufe der log4j-API an slf4j weitergeleitet werden.

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

Beide gelten Bibliotheken zu verwenden und sind gleichermaßen ‚Standard‘, es hängt von dem Projekt.

Im Allgemeinen, wenn Ihr Projekt log4j bereits verwendet und Sie nicht in der Lage sind, alle Ihre log4j Logger auf slf4j Loggers zu aktualisieren; log4j-over-slf4j ist eine schnelle Lösung, um sofort slf4j verwenden zu können.

Wenn Ihr Projekt jedoch neu ist oder keinen vorhandenen Protokollierungsmechanismus hat und Sie sich für slf4j entscheiden, wäre slf4j-log4j der richtige Weg, da nur slf4j an log4j gebunden werden soll.

Das stimmt, ich stimme dem Kommentar von c12 zu. Beenden Sie die Verwendung von log4j und verwenden Sie stattdessen slf4j und logback.

+0

Perfekt gültig und vollständige Antwort –

+0

Obwohl Ihre Antwort mich perfekt gerettet hat, danke! Aber Ausschlüsse im Abhängigkeitsverhältnis sehen ein bisschen hacken aus. Gibt es eine generische Definition, die Maven veranlasst, Ausschlüsse in allen zugrunde liegenden Elementen anzuwenden? – Sankalp

+1

@Sankalp Fragen Sie [Gibt es eine Möglichkeit, eine Maven-Abhängigkeit global auszuschließen?] (Http://stackoverflow.com/q/4716310/953327) – FGreg

2

in meinem Projekt ist org.slf4j.impl.Log4jLoggerFactory in

activemq-all-5.7.0.jar 

nicht in slf4j-log4j12.jar

die Ausnahmemeldung mich verleiten

Verwandte Themen