Configurando los Appenders de Log4J para Producción

Log4J tiene 2 Appenders principales: el Console Appender y el File Appender.

El ConsoleAppender imprime la información en la consola mientras que el FileAppender escribe a un fichero (normalmente configurado para que rote al llegar a un tamaño o pase el día).

Un error típico en el uso del Log4J es dejar el ConsoleAppender en Producción. Es un error porque imprimir texto a la pantalla es un gran trabajo para el Sistema Operativo que tiene que escribir las letras, hacer scroll, cambiar de línea,… de hecho en Windows escribir a la consola es una operación bloqueantes y sin buffer, por lo que escribir muchos datos a la consola empeora notablemente el rendimiento.

Este Test de JMeter muestra la diferencia entre escribir a la consola y a fichero (el test escribe un texto de 80 caracteres mil veces):

Con el FileAppender se obtiene una velocidad de más de 2 veces que cuando se usa el ConsoleAppender.

El FileAppender también se puede optimizar colocando el parámetro:

<param name=»ImmediateFlush» value=»false» />

Por defecto el FileAppender hace un flush a disco después de cada evento. Indicándole esta propiedad el StreamWriter hace un buffer en memoria antes de escribir a disco.

En el ejemplo anterior con este cambio obtenemos:

Otra optimización es usar el parámetro:

<param name=»BufferedIO» value=»true» />

Con esta opción el fichero se mantiene abierto, en el ejemplo:

Deja un comentario