Logs en Java
7 septiembre 2008 at 4:38 pm Deja un comentario
Los que conocemos Java desde antes de la versión 1.4 sabemos que no siempre ha existido un API de logs dentro de la JDK. En aquellos no tan lejanos tiempos utilizábamos otras librerías para sacar nuestras trazas. La más utilizada sin duda: log4j de la Apache Software Foundation.
Por eso, cuando en la Java 1.4 sacaron el API de logs integrado (a veces llamado JUL por Java Util Logging), además muy inspirado en log4j pero sin llegar a su nivel, muchos seguimos fieles a log4j.
Poco después apareció commons-logging, también desarrollado dentro de la Apache Software Foundation, que venía a ser una capa de abstracción que permitía utilizar tanto el JDK Logging como log4j por debajo. Personalmente a mí me pareció una capa más en un punto que no veía tan crítico dentro de un proyecto y no lo llegué a utilizar mucho, aunque si goza de una buena implantación.
Y finalmente llego a lo que es el germen de esta entrada, que es logback, un proyecto también libre que intenta ser una actualización de log4j. De hecho la cara más visible de logback es también un importante miembro de log4j: Ceki Gülcü. Respecto a log4j, logback promete un aumento de rendimiento a la vez que una disminución en el consumo de recursos. Como ejemplo algunas frases tomadas de presentaciones de logback:
- Determinar si se debe sacar la traza para una sentencia: 3 ns en logback frente a 30 ns en log4j.
- Crear un Logger: 13 ns de logback por 23 ns de log4j.
- Localizar un Logger: 94 ns en logback frente a los 2234 ns de log4j.
- Tamaño de un Logger: 40 bytes en logback y 140 bytes en log4j.
Sin duda las mejoras parecen existir, algo que puede ser lógico, ya que logback ha sido diseñado desde cero teniendo en cuenta la experiencia de muchos años trabajando en log4j.
Logback implementa SLF4J (Simple Logging Facade for Java), una nueva abstracción que permite intercambiar posteriormente el sistema de logging utilizado. Proporciona un API que productos como logback implementa y también proporciona unos puentes para pasar de forma sencilla de los sistemas más antiguos a SLF4J. Por ejemplo proporcionan un puente para log4j, de forma que si en una aplicación existente sustituimos el jar de log4j por el del puente, sin tocar nuestro código estaremos «logeando» a través de SLF4J y la implementación que utilicemos (¿logback?).
Entre los proyectos que utilizan SLF4J aparecen varios de renombre como: Jetty, Geronimo, Tapestry, Hibernate o Dbunit.
Yo creo que en mi próximo proyecto utilizaré SLF4J y logback. ¿Y vosotros?, ¿os he animado?.
Trackback this post | Subscribe to the comments via RSS Feed