AOWS

Just another adrian’s weblog

Logging con SLF4J

with one comment

SLF4JSLF4J (Simple Logging Facade for Java) proporciona una capa de abstracción sobre otros APIs de logging como log4j o LogBack. Esta librería permite cambiar la implementación de forma transparente, de un modo similar a Commons Logging. Sin embargo, ésta última elige el API en tiempo de ejecución (lo cual puede provocar algún que otro problema), mientras que SFL4J lo hace al desplegar la aplicación usando un JAR puente.

Una de las grandes ventajas de SLF4J es que no necesitamos inundar nuestro código con comprobaciones del nivel de log. Si usamos log4j, por ejemplo, podemos tener algo como:

log.debug("Esto es un " + texto + " muy largo, con " + variables[i] + " que se van añadiendo a una " + object.getCadena());

Por mucho que el compilador optimice este código (reemplazando las concatenaciones de cadenas usando StringBuilder), si se ejecuta muchas veces repetidamente sin necesidad (porque la aplicación está desplegada en producción y el nivel de log está por encima de debug, por ejemplo) podría llegar a afectar al rendimiento. Por lo que no es extraño ver código Java tal como este:

if (log.isDebugEnabled()) {
  log.debug("Esto es un " + texto + " muy largo, con " + variables[i] + " que se van añadiendo a una " + object.getCadena());
}

SLF4J nos permite parametrizar el log al estilo printf de C:

log.debug("Esto es un {} muy largo, con {} que se van añadiendo a una {}", texto, variables[i], object.getCadena());

Esto evita problemas de rendimiento al tratar con cadenas, pero evidentemente si los parámetros como object.getCadena() son costosos nada nos librará de tener que usar los dichosos if.

SLF4J tiene más ventajas, para conocerlas nada mejor que este artículo o el manual oficial.

Written by adrian

13 febrero, 2010 a 01:16

Publicado en Uncategorized

Tagged with , ,

Una respuesta

Subscribe to comments with RSS.

  1. Buenas,

    los problemas de inundar tu código con if’s, la concatenación de cadenas largas y el cambio de implementación de framework, te los puedes quitar introduciendo tú mismo una clase intermedia que abstraiga tu código de la monitorización.

    Así utilizarías algo como una clase Traceador.debug (“….”, arg1, arg2…) que se implemente con el if(log.isDebugEnabled()) y la concatenación de los argumentos.

    Saludos y sigue escribiendo!

    yoyoooyoy

    20 julio, 2011 at 09:46


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: