Log in Java: integrazione tra slf4j e log4j

Lo scenario di utilizzo è questo:

Stiamo sviluppando una applicazione complessa, che utilizza come piattaforma di logging slf4j. Simple Logging Facade for Java (SLF4J) non è altro che questo:

The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.

La nostra applicazione utilizza ovviamente alcune librerie, qualcuna scritta da noi, altre scritte da terzi. Alcune di queste librerie utilizzano log4j. Lo scopo di questo esempio è mostrare come utilizzare il brigde:

log4j-over-slf4j

per redirigere tutto il log proveniente da log4j verso slf4j.
In questo esempio abbiamo 3 progetti:

  • Una libreria che utilizza log4j
  • Una libreria che utilizza slf4j
  • Un progetto che utilizza slf4j implementandolo con la sua implementazione nativa Logback

 

La libreria che utilizza log4j ne dichiara la dipendenza nel pom in questo modo:

invece la libreria che utilizza slf4j lo fa in questo modo:

Il progetto che utilizza Logback, e usa entrambe le librerie dichiara la dipendenza ad entrambe, ma esclude dalle sue dipendenze log4j:

Le prime due dipendenze sono le librerie, la terza dipendenza:

è il bridge per che trasforma le chiamate a log4j a chiamate a slf4j. La quarta dipendenza:

è l’effettivo framework usato dal progetto per il logging.

Senza l’esclusione di log4j avremmo nel classpath finale del progetto anche log4j.jar, e non verrebbe quindi utilizzato il brigde, che non fa altro che andare a sostituire le chiamate di log4j.

Il progetto di esempio contiene solo questo codice:

Se lo lancio ottengo questo:

quindi tutto il log, anche quello proveniente da log4j viene rediretto verso slf4j, e quindi logback.

Il progetto di esempio di cui si parla è scaricabile da qui.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *