Introducción a Log4j
Cuando construimos una aplicación Java, uno de los principales errores que
se suelen cometer, es una mala gestión de logs.
Los programadores, llenamos lo programas de System.out.println() por
lo que posteriormente no se pueden eliminiar o filtrar de un modo sencillo.
Una de las primeras recomendaciones que se debe seguir es centralizar todos
los mensajes en una única funcion (declarada estática en una clase de
utilidades).
Para estandarizar esta labor, se creó hace tiempo una API, llamado log4j (logs
for java) donde disponemos de un mecanismo sencillo donde se especifica
- Fuente de datos: Logger.getLogger(puntoentrada.class);
- Donde y como mostrar los mensajes: PropertyConfigurator.configure(«log4j.properties»);
- El tipo y mensaje a mostrar: logger.info(«Fin de la aplicación.»);
Para obtener esta funcionalidad hay que:
- Descargarse log4j de http://jakarta.apache.org
- Poner en el classpath el paquete log4j-1.2.x.jar
- Incluir los paquetes en nuestro programa
La definición de la clase es tal que así:
package org.apache.log4j;
public class Logger { // Creation & retrieval methods: // printing methods: // generic printing method: |
Los niveles de mensaje son DEBUG, INFO, WARN, ERROR y FATAL y tenemos un
método para cada uno de ellos.
Lo demás, como se puede ver en el ejemplo, el uso es muy sencillo:
El fichero básico de configuración, indicando que queremos almacenar en un
fichero los mensajes es:
log4j.rootCategory=ALL, Default log4j.appender.Default=org.apache.log4j.FileAppender log4j.appender.Default.file=server.log log4j.appender.Default.layout=org.apache.log4j.xml.XMLLayout log4j.appender.Default.append=false |
El resultado es:
<log4j:event logger=»puntoentrada» timestamp=»1051974345322″ level=»INFO» thread=»main»> <log4j:message><![CDATA[Comienzo de la aplicación.]]></log4j:message> </log4j:event> <log4j:event logger=»puntoentrada» timestamp=»1051974345362″ level=»ERROR» thread=»main»> <log4j:event logger=»puntoentrada» timestamp=»1051974345362″ level=»INFO» thread=»main»> |
Un buen punto de comienzo con log4j http://jakarta.apache.org/log4j/docs/manual.html
La ventaja de usar este sistema es que, simplemente cambiando el fichero de
propiedades, podemos enviar los mensajes de log en vez de a un fichero, a una
consola como ChainSaw
Para usar esta consola (que ya estará integrada en futuras
versiones de log4j) hay que poner en el classpath su jar (chainsaw-1.x.jar)
e invocar su comando de arranque:
java com.puppycrawl.tools.chainsaw.Main
El fichero de configuración para esto, tendría esta forma:
log4j.rootCategory=DEBUG, Default, Chainsaw
log4j.appender.Default=org.apache.log4j.FileAppender log4j.appender.Chainsaw=org.apache.log4j.net.SocketAppender |
Comparto los comentarios del \\\»usuario anónimo\\\». En breve publicaré un tutorial sobre esta librería….
¡Tío, te has pasado de la raya! Al programador estándar le interesa instalación de log4j.properties, la librería y un ejemplo de uso!!
EXTENSIÓN DEL TUTORIAL
INSTALACIÓN Y CONFIGURACIÓN DE LOG4J EN UN PROYECTO DE NETBEANS
Log4j proporciona un mecanismo flexible de log. Los objetos que invoca una aplicación para generar log se denominan \\\»loggers\\\» y son de la clase Logger.
Una estrategia común y conveniente es que cada una de nuestras clases (al menos las que van a emitir log) tengan un objeto estático.
Los niveles son los siguientes: debug, info, warn, error, fatal.
El import, el siguiente: import.org.apache.log4j.Logger;
Una línea de código de ejemplo es la siguiente:
logger.debug(\\\»Se asigno codigo a objeto Idioma:\\\» + idiomaCodigo);
Descarga: http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.15/apache-log4j-1.2.15.tar.gz
En el raíz crear el archivo log4j.properties con el siguiente contenido (modificar a gusto):
### Para dirigir mensajes a la salida estandar ###
log4j.appender.pantalla=org.apache.log4j.ConsoleAppender
log4j.appender.pantalla.Target=System.out
log4j.appender.pantalla.layout=org.apache.log4j.PatternLayout
log4j.appender.pantalla.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%n
### Para dirigir mensajes a un archivo ###
log4j.appender.archivo=org.apache.log4j.FileAppender
log4j.appender.archivo.File=prueba.log
log4j.appender.archivo.layout=org.apache.log4j.PatternLayout
log4j.appender.archivo.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L – %m%n
### Root logger ###
log4j.rootLogger=warn, archivo
### Configurar otros loggers ###
log4j.logger.com.mydomain.data=info, pantalla
Appenders: canales de salida. Sólo uno es imprescindible.
* org.apache.log4j.ConsoleAppender = Dirigir los mensajes a la salida estándar
* org.apache.log4j.FileAppender = Dirigir los mensajes hacia un archivo
Saludos cordiales,
Jaime
—– Original