Un progetto di mine viene compresso come un file EAR che contiene API SLF4J (1.7.5) nonché le librerie di logback come implementazione (logback-core 1.0.13
e logback-classic 1.0.13
).SLF4J - Le associazioni vengono sovrascritte da altre applicazioni sullo stesso server applicazioni
Quando I (usato per) distribuire il mio progetto, LoggerFactory di SLF4J trova il logback possibile come vincolante e viene utilizzato il logger corretto (cioè il logback).
Ora ho un connettore risorsa (activemq-rar-5.8.0.rar
) che viene distribuito prima del mio file EAR (come i file EAR richiede l'RAR). Sfortunatamente questo RAR contiene la sua implementazione SLF4J (slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
log4j-1.2.17.jar
). I file RAR utilizzano l'implementazione log4j.
Quando distribuisco il file EAR, LoggerFactory all'interno del codice dell'applicazione utilizza improvvisamente l'implementazione log4j (org.slf4j.impl.Log4jLoggerAdapter
), anche se mi aspettavo che il classpath fosse separato dal RAR.
Questo non sembra essere il caso - quindi cosa sto facendo male (il RAR dovrebbe usare log4j, il mio EAR dovrebbe usare il logback)?
Update 1: It doesn't look as if I am alone, ma purtroppo una risposta manca ..
Aggiornamento 2:
Secondo this tavolo, GlassFish carica il modulo connettore prima le librerie EAR/WAR (che sono le ultime librerie libere da caricare).
Update 3:
sono riuscito a risolvere il "vincolante": Se metto il slf4j-api-1.7.5.jar
e l'implementazione logback (logback-core-1.0.13.jar
e logback-classic-1.0.13.jar
) all'interno della cartella domains/<myDomain>/lib
in GlassFish, verrà utilizzato logback come implementazione di registrazione (vedi Aggiornamento 2 - "Common Classloader" viene prima di "Connector Classloader").
Purtroppo i miei file di configurazione non vengono più trovati poiché si trovano all'interno di WAR/EAR - che verranno caricati successivamente da un altro classloader ("Archive Classloader").
Quindi questa non è davvero una soluzione per me dato che mi piacerebbe mantenere i file di configurazione di logback all'interno di EAR/WAR (dato che ogni applicazione usa una configurazione diversa).
Genere riguarda
stupidSheep
Perché il pacchetto log4j in una dipendenza? Il contenitore non può occuparsi della configurazione della registrazione e fornire l'impl? – roby
Non impacchetta log4j come dipendenza da solo. È nel RAR (resource adapter) fornito da Apache ActiveMQ (http://activemq.apache.org/maven/5.8.0/activemq-rar/dependencies.html). Questi file JAR si trovano all'interno del RAR insieme ad alcuni file di configurazione del registro. – stupidSheep