2013-08-19 21 views
8

Qualcuno può dirmi la differenza tra slf4j-log4j e log4j-over-slf4j? Qual è lo standard più da usare in un'applicazione web Java? Al momento sono entrambi sul classpath e ciò sta causando un'eccezione di runtime in quanto il server Web sta tentando di impedire il verificarsi di un StackOverFlowException.java.lang.IllegalStateException: Rilevato sia log4j-over-slf4j.jar AND slf4j-log4j12.jar sulla classe pat

Eccezione:

java.lang.IllegalStateException:
rilevato sia log4j-over-slf4j.jar E slf4j-log4j12.jar sul percorso della classe

+1

rimozione di entrambi sarebbe una bella idea. –

+1

e sostituire con? – c12

+0

Ti suggerisco di esaminare i contenuti di entrambi e capire come sono diversi. –

risposta

20

slf4j-log4j sta usando log4j come implementazione di slf4j.

log4j-over-slf4j fa sì che le chiamate all'API log4j vengano "indirizzate" a slf4j.

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

Entrambi sono librerie validi da utilizzare e sono ugualmente 'standard', dipende dal progetto.

In generale, se il progetto utilizza già log4j e non è possibile aggiornare tutti i logger log4j ai logger slf4j; log4j-over-slf4j è una soluzione rapida per poter iniziare a utilizzare immediatamente slf4j.

Tuttavia, se il progetto è nuovo o non ha un meccanismo di registrazione esistente e si sceglie di utilizzare slf4j, slf4j-log4j sarebbe la strada da percorrere in quanto è solo specificando che slf4j deve essere associato a log4j.

Detto questo, sono d'accordo con il commento di c12. Smetti di usare log4j e usa invece slf4j e logback.

+0

Risposta perfettamente valida e completa –

+0

Anche se la tua risposta mi ha salvato perfettamente, grazie! Ma avere esclusioni in maggio di dipendenza sembra un po 'hacking. Esiste una definizione generica per indirizzare Maven ad applicare l'esclusione in tutto il sottostante? – Sankalp

+1

@Sankalp Stai chiedendo [esiste un modo per escludere una dipendenza da Maven a livello globale?] (Http://stackoverflow.com/q/4716310/953327) – FGreg

2

nel mio progetto, org.slf4j.impl.Log4jLoggerFactory è in

activemq-all-5.7.0.jar 
non

in slf4j-log4j12.jar

il messaggio di eccezione mi ingannare