Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Configurando log4j

Log4j tiene los siguientes niveles de traza que se definen con el tag <priority>:
  • OFF: no se muestra en ningún mensaje (se encuentra apagado)
  • FATAL: para mostrar mensajes de situaciones que probablemente harán abortar la aplicación
  • ERROR: para mostrar mensajes de errores que no son deseados pero que no interrumpirán la aplicación.
  • WARN: para mostrar mensajes de contextos peligrosos para la aplicación, o ciertas operaciones de uso no recomendado
  • INFO: para mostrar mensajes de información sobre la ejecución de la aplicación, o eventos importantes dentro de la misma
  • DEBUG: para mostrar mensajes interesantes para depurar la aplicación. Para la etapa de desarrollo.
  • ALL: se muestra en todos los casos
Se puede configurar en tres formas, con código Java, con archivo .properties o un archivo .xml, En esta ocasión veremos un xml debido que es más fácil para algunos desarrolladores, aunque yo me acomodo mejor con un .properties.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="Fichero"
class="org.apache.log4j.FileAppender">
<param name="File"   value="A1.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%t %-5p %c{2} - %m%n"/>
</layout>
</appender>
<appender name="Consola"
class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug"/>
<appender-ref ref="Consola"/>
<appender-ref ref="Fichero "/>
</root>
</log4j:configuration>
Explicando un poco el archivo de configuración XML:
  1. La linea con DOCTYPE indica cual es el archivo DTD para validar la sintaxis de este archivo de configuración; el log4j.dtd lo encuentras en el paquete org.apache.log4j.xml de la librería log4j-1.2.x .jar. Basta con colocarlo en el classpath o la misma ruta donde se ubica el archivo XML de configuración de log4j.
  2. El tag appender indica un destino para el log, en este caso tenemos a FileAppender (un archivo) que indica como parámetro 'File' el nombre del archivo y ConsoleAppender (la consola), aunque existe una lista mas amplia de appenders :
    1. AppenderSkeleton, AsyncAppender, DailyRollingFileAppender, ExternallyRolledFileAppender, JDBCAppender, JMSAppender, LF5Appender, NTEventLogAppender, NullAppender, RollingFileAppender, SMTPAppender, SocketAppender, SocketHubAppender, SyslogAppender, TelnetAppender, WriterAppender
  3. El tag layout de cada appender define el formato de la linea que se va a trazar, puede incluir fecha, hora, clase ejecutada con o sin paquete, numero de linea que traza dentro de la clase, mensaje, etc. De acuerdo al layout utilizado, los cuales pueden ser: DateLayout, HTMLLayout, SimpleLayout, XMLLayout.
    1. El más robusto a mi parecer es PatternLayout, el cual utiliza su propiedad 'conversionPattern' para definir el formato de salida en forma de patrones.
      1. Ejemplo General: "%t %-5p %c{2} - %m%n" - muestra el nivel de debug, la clase que la ejecuta, un guión, el mensaje (%m) y un salto de linea
      2. Cada patrón tiene un formato de conversión: %[alineaciónIzq][anchoMínimo][.][anchoMáximo]c, esto define que al texto al que el patrón 'c' se refiere, se le puede otorgar un ancho mínimo y/o máximo (con numero y el punto es solo para diferenciarlo en caso de venir ambos límites), también permite alinear a la izquierda con un signo '-' (menos), si no existe es a la derecha. El '%' da inicio al patrón.
      3. Ejemplo 2: %20.30m esto quiere decir que el mensaje tendrá como un mínimo 20 caracteres, máximo 30 y sera alineado a la derecha
      4. Ejemplo 3: %-5p indica que mostrara la prioridad en un mínimo de 5 caracteres alineados a la izquierda
      5. La lista de patrones esta en la tabla 'Conversion Character' de la pagina PatternLayout, pero algunos de ellos son: c(categoria del evento que traza), C(fully qualified class name), d(formato fecha), F(nombre del archivo que traza), l(fully qualified name of the calling method), L(# linea de la case donde se traza), m(mensaje), M, n(salto de linea), p(prioridad), r, t (nombre del hilo), x, X y %.
  4. El tag root define que para todo el sistema se harán trazas hacia los destinos definidos por el tag appender-ref. Aunque en este caso, se escriben para todo el sistema en la consola y en el archivo, lo correcto es definir por paquetes o clases el nivel de trazo.
Finalmente para usar un archivo XML de configuración para log4j en nuestro código, debermos hacer:

org.apache.log4j.xml.DOMConfigurator.configure("ruta_al_archivo\\log4j.xml");

En mi caso el metodo main viene asi:

public static void main( String[] args ) {
DOMConfigurator.configure("src\\main\\resources\\log4j.xml");
log.debug("## -> Prueba :: [" + pruebaService.getClass() + ']');
pruebaService.ejecutar();
log.debug("## <- Prueba :: [" + pruebaService.getClass() + ']');
}


Referencias:

No hay comentarios:

Publicar un comentario

Que opinas sobre esta publicación?