Introducción a log4j

2
96246

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:
public static Logger getRootLogger();
public static Logger getLogger(String name);

// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);

// generic printing method:
public void log(Level l, Object message);
}

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:message><![CDATA[Mostramos un error.]]></log4j:message>
</log4j:event>

<log4j:event logger=”puntoentrada” timestamp=”1051974345362″ level=”INFO” thread=”main”>
<log4j:message><![CDATA[Fin de la aplicación.]]></log4j:message>
</log4j:event>

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.Default.file=../log/server.log
log4j.appender.Default.layout=org.apache.log4j.xml.XMLLayout
log4j.appender.Default.append=false

log4j.appender.Chainsaw=org.apache.log4j.net.SocketAppender
log4j.appender.Chainsaw.remoteHost=localhost
log4j.appender.Chainsaw.port=4445
log4j.appender.Chainsaw.locationInfo=true

Sobre el
Autor ..

2 Comentarios

  1. 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!!

  2. 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

Dejar respuesta

Please enter your comment!
Please enter your name here