[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SLF4J y Version 99 Does Not Exist



Hola,

En nuestro Ãltimo proyecto, que estamos a punto de poner en producciÃn, 
hemos decidido migrar a SLF4J (Simple Logging Facade for Java) [1], un
proyecto detrÃs del cuÃl està Ceki GÃlcÃ, creador de Log4J.

Conceptualmente el proyecto es similar a Jakarta Commons Logging
(JCL) [2]; es decir, proporciona a las aplicaciones un API fachada de
logging, que permite reemplazar la implementaciÃn de logging
subyacente (Log4J, JDK 1.4, Logback, etc.) sin tener que recompilar la
aplicaciÃn. Esto es especialmente Ãtil para desarrolladores de
librerÃas o frameworks, que de este modo, no imponen al usuario final
ninguna dependencia de una implementaciÃn concreta.

La diferencia entre ambos frameworks radica en su implementaciÃn, siendo
la de SLF4J mucho mÃs sencilla (y tambiÃn robusta). A diferencia
de JCL, la asociaciÃn con la implementaciÃn finalmente empleada se
realiza estÃticamente (en tiempo de despliegue) evitÃndonos los
frecuentes problemas con classloaders que plantea commons-logging. Por
ejemplo, para usar Log4J como backend, basta aÃadir el adaptador
slf4j-log4j12.jar (y por supuesto log4j-1.2.x.jar) al classpath de la
aplicaciÃn.

AdemÃs de resolver los quebraderos de cabeza habituales de JCL, aporta
otras caracterÃsticas interesantes como:

  * Parametrized Logging: Estamos acostumbrados a evitar el coste de
    generaciÃn de los mensajes de traza cuando està desactivada
    mediante expresiones de comprobaciÃn del tipo:

      Logger logger = ...

      if (logger.isInfoEnabled()) {
        logger.info("Thread name: " + name);
      }

    Mediante los mensajes parametrizados de SLF4J esta expresiÃn se
    puede reemplazar por esta otra, mucho mÃs simple:

      logger.info("Thread name: {}", name);


  * Puente entre APIs de logging: AdemÃs de usar directamente el
    SLF4J API, tambiÃn es posible usarlo como puente entre diferentes
    implementaciones. Existen implementaciones de JCL over SLF4J o
    Log4J over SLF4J, de modo que las aplicaciones existentes se
    pueden migrar fÃcilmente.

Los que useis Maven2 os encontrareis con la tediosa tarea de
excluir las dependencias transitivas de commons-logging de cada
librerÃa que la utilice. En este punto nos ha resultado de gran
utilidad "Version 99 Does Not Exist" [3], un simple pero genial idea de
Erik Van Ooesten, consistente en un repositorio Maven 2 que sirve JARs
vacÃos (y sus correspondientes poms y metadatos) de cualquier paquete
con el nÃmero de versiÃn 99.0-does-not-exist. 

De esta manera, para eliminar cualquier rastro de commons-logging de
un proyecto basado en Maven2, basta con aÃadir la dependencia:

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>99.0-does-not-exist</version>
    </dependency>


Espero que a alguien le pueda ser de utilidad.

Un saludo,
Rafa


[1] SLF4J: http://www.slf4j.org/
[2] JCL: http://commons.apache.org/logging/
[3] Version99 Does Not Exist:
http://day-to-day-stuff.blogspot.com/2007/10/announcement-version-99-does-not-exist.html


-- 
Rafael Luque Leiva

Osoco - http://www.osoco.es
Creando software para las personas

Edificio Moma Lofts
Planta 3, Loft 18
Ctra. MÃstoles-Villaviciosa, Km 0,2
MÃstoles, E28935 Madrid
Tel: +34 692 613 639
Fax: +34 916 091 075

GnuPG Key ID: 0x4B9238A2


Este mensaje puede contener informaciÃn confidencial y/o privilegiada.
Si usted no es la persona a la que va dirigido este mensaje y/o no estÃ
autorizado a leerlo, usted no puede usar, copiar, difundir o tomar
alguna acciÃn basada en el contenido incluido. Si usted ha recibido
este mensaje por error, por favor avise inmediatamente al remitente y
borre este mensaje. Gracias por su colaboraciÃn.

This message may contain confidential and/or privileged information. If
you are not the addressee or authorized to receive, you must not use,
copy, disclose or take any action based on this message or any
information herein. If you have received this message in error, please
advise the sender by reply e-mail and delete the message. Thank you for
your cooperation.