Log4J - Como mejorar el tiempo de logeo


Después de buscar por la web encontrar un sin fin de post referidos a esto, pero todos eran un copy paste barato ya que dejaban un margen a pensar por que pasaba esto, encontré un post interesante analice la fuente y encontré el pequeño tip faltante.
¿Porqué poner isDebugEnabled()  isInfoEnabled()?
Si el log de una aplicación está desactivado por completo o solo para unos niveles (error, warn…), el coste de una solicitud de log consiste en: llamada (invocación) al método + una comparación de enteros. Supone un coste en nanosegundos, pequeño, pero si tenemos la aplicación llena de líneas de log que no llaman a info… granito a granito creamos una montaña.
Si se pone log.isDebugEnabled() en el peor de los casos se pierde tiempo en evaluar la condición, pero hablamos de un tiempo inapreciable, mucho menor que en el caso anterior.
Por eso siempre que no vayamos a poner el nivel info es mejor preguntar, si estamos en ese nivel.
if(logger.isDebugEnabled() {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
Sacado del manual de log4j.
La diferencia es que si no se ponen el isDebugEnabled() el "logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));" la sentencia se ejecuta igual, sin depender si debe logear o no, ya que el framework solo verifica si debe mostrar o no la linea, no si la misma se debe ejecutar o no.
Modificaciones agregadas marcadas en gris de mi propia autoria.


Log4J - Como mejorar el tiempo de logeo Log4J - Como mejorar el tiempo de logeo Reviewed by El lado oscuro de java on mayo 03, 2012 Rating: 5

No hay comentarios:

Con la tecnología de Blogger.