Translate

jueves, 21 de febrero de 2013

Configuración de Log4j para un proyecto WEB con un archivo de properties

Log4j web Project configuration

El post de hoy surge por la necesidad de configurar correctamente los logs que salen por consola en nuestros proyectos WEB.

Se acabó el utilizar el el System.out.println.



La configuración es muy variada:

1 - Configuración por programación: Desde un public void Main:
2 - Configuración desde un XML
3 - Configuración desde un archivo de properties.

pero aquí me voy a centrar en mi caso particular que es la configuración de log4j en un proyecto WEB a través de un archivo de properties.

1 - Lo primero que necesitamos tener es la última versión de nuestra librería favorita log4j.

2 - Configuramos un proyecto WEB en nuestro IDE favorito, eclipse en mi caso.

3 - Ponemos la librería (log4j-1.2.17.jar) en el directorio WEB-INF/lib

4 - Creamos y configuramos un servlet para poder realizar las pruebas, en mi caso con Spring Framework.

Una vez que tenemos el proyecto correctamente configurado vamos a lo que nos interesa

5 - Creamos el archivo log4j.properties en el raíz del directorio src para que esté en la raíz de nuestras clases, con la siguiente configuración

--
# log4j.properties for 

# Set root category priority to DEBUG and its only appender to Console.
log4j.rootLogger=debug,stdout


#appender definition
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= linea %L %c %d %m  %n

--

Con estos pasos ya sería suficiente para que aparecieran trazas pero vamos a ver como configurar, pero vamos a entender un poco como funciona.

Tenemos que diferencias entre loggers, appenders y layouts

Un logger es el elemento que se encarga de recopilar y generar los logs en base a una configuración de un appender y un patternlayout. En nuestro ejemplo el logger es stdout

Un appender es donde se almacenan los logs generados por los loggers, hay muchos tipos lo más usados el org.apache.log4j.ConsoleAppender para mostrarlo por consola. Para ampliar información en las referencias hay un montón de tipos.

Un layout es la manera en que se imprime la traza, es decir que información escribirá el logger en el appender.

El rootLogger = Es el padre de todos los appenders y la cong

Con el código que hemos puesto en la clase log4jtest.java y con la configuración de log4j.properties en debug nuestras trazas que aparecerían en la consola serian las siguientes:


linea 22 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,057 debug
linea 23 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 error
linea 24 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 info
linea 25 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 fatal
linea 26 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 trace  Esta no debe de salir

Modificando la línea:


log4j.rootLogger=debug,stdout

podemos modificar el nivel de nuestros logs para que aparezcan o no las trazas que queremos.




Si pongo

log4j.rootLogger=error,stdout

al configurarlo para que salgan las trazas de error, las dos únicas líneas que aparecerían serían:



linea 24 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 info
linea 25 org.antuansoft.mvc.log4jtest 2013-02-16 02:48:15,058 fatal


UPDATE:

Si lo que quieres es modificar el nivel de log de uno de los paquetes de tu proyecto nada más, lo que tienes que hacer es añadir la siguiente línea al log4j.properties

log4j.category.com.mypackage=LEVEL
Por ejemplo:
log4j.category.org.antuansoft.mvc=info
Eso haría que sólo las trazas que contengan ese paquete se muestren en modo info y el resto en el modo que hayamos especificado el rootlogger.



Aquí dejo un enlace con el de código y información ampliada  en los enlaces.

Código en githup, ejemplo MVC con SpringFramework y log4j

Para acceder sólo hay que ponerlo en un servidor de aplicaciones tomcat y ejecutar la siguiente url

http://localhost:8080/AntuanSoft_BASE_WEB_SPRING_PROJECT/log4jtest





Referencias: Para más información este tutorial cubre todos los casos http://www.javatutoriales.com/2011/04/log4j-para-creacion-de-eventos-de-log.html
http://www.arquitecturajava.com/log4j-y-pattern-layouts/
http://stackoverflow.com/questions/1725958/how-do-you-change-a-packages-log-level-using-log4j

No hay comentarios:

Publicar un comentario