Hemos visto en el anterior post varias formas de usar PatternLayout a la hora de almacenar información sobre log para nuestra aplicación . Una de las opciones que hemos visto es usar %d que nos muestra la fecha . Sin embargo esta forma delega en el api del JDK y en la clase SimpleDateFormat que no tiene buen rendimiento . Es mejor usar alguno de los propios formateadores de Log4J para fechas . Cambiando nuestro código de %d a %d{ABSOLUTE} o %d{DATE} de esta forma ganaremos en rendimiento.
Otras dos opciones que son realmente lentas a la hora de grabar información al log son %M (nombre del método) y %F (nombre del fichero que generó el Log) evitemoslas dentro de lo posible .
Otra de las cosas que suele relentizar el funcionamiento del Log es el uso que hacemos por defecto de los appenders de consola
log4j.appender.miappender=org.apache.log4j.ConsoleAppender
Este tipo de appenders en un primer momento nos parecen muy útiles por ser muy sencillos por ejemplo yo los he usado en los distintos capítulos del libro . Sin embargo cuando llegamos a entornos de producción reales no son tan útiles ya que los administradores prefieren un appender a fichero FileAppender. Lo que mucha gente no conoce es que no solo es mas util sino que tambien es mucho mas rapido usar un FileAppender que un ConsoleAppender . Concretamente el FileAppender es el doble de rapido que el ConsoleAppender . Por lo tanto es interesante en producción desactivar los appender de Consola que tengamos.
El FileAppender como su nombre indica escribe en un fichero . Ahora bien la forma de escribir es continua es decir cada vez que llega un mensaje lo escribe en el fichero lo cual en un principio parece razonable pero implica también que estamos escribiendo continuamente . Esto se debe a que el FileAppender tiene configurada la siguiente opción por defecto.
log4j.appender.FILE.ImmediateFlush=true
Si cambiamos esta opción por false ganaremos rendimiento ya que el FileAppender usará un Buffer para cachear un conjunto de mensajes antes de escribirlos al disco . Simplemente activando esta opción el rendimiento del log puede mejorar un 50% o mas.
Hola, manejo un servidor jboss, y utilizo log4j . Actualmente hay dos apenders, uno a consola y otro a archivo. siempre pense que escribir a archivo era mas pesado que a consola, hoy veo que no segun esta entrada. Entonces es mejor deshabilitar el apender de console? a penas estoy revisando de optimizar el server, acabo de cambiar el nivel, de INFO a WARN, para que loguee menos, claro solo lo hize al apender de archivo, pensando que este era mas pesado. PD , la consola que uso es MS-DOS , una ventana que mantengo abierta mientras se utiliza el… Read more »
Al final al escribir a fichero no hay que gestionar o controlar ninguna pantalla lo cual lo hace mas rapido . Ya que por ejemplo en la pantalla va realizando tareas como scroll cosa que en el fichero no es necesario .Haras scroll cuando lo habras con un editor.