Log4java (Parte 1)

Introducción a log4j.
Log4j ha sido elegido recientemente finalista en la categoría de "API/Tecnología Java nueva o revisada más útil." de los JavaWorld Editors' Choice Awards, que podrían equipararse a los Oscar del mundo Java.
Desde javaHispano queremos acercarte este API que te sorprenderá tanto por su sencillez, como por su potencia.
¿Qué es Log4j y dónde puedo encontrarlo?
Log4j es un API para manejar el registro (log) de operaciones en nuestros programas, que tan necesario resulta en los períodos de depuración. Log4j es uno de los componentes del proyecto Jakarta (al igual que Tomcat) de Apache, cuya página web principal es: http://jakarta.apache.org/log4j/
¿Cómo funciona Log4j?
En primer lugar, debemos saber que el API nos ofrece cinco prioridades diferentes, que de mayor a menor son: DEBUG, INFO, WARN, ERROR, FATAL
, aunque de ser necesario también es posible crear nuestras propias prioridades.
De manera similar a la estructuración en paquetes de Java, Log4j divide los tipos de registro por categorías, cuya prioridad es hereditaria. Por ejemplo, si no definimos una prioridad para la categoría "com.javahispano.prueba", heredaría la prioridad de "com.javahispano". De esta forma, una vez definida una categoría, podemos enviar peticiones de registro (log requests) utilizando los métodos que ésta nos ofrece.
Para determinar la información que acompaña a nuestros mensajes, Log4j nos ofrece los Layouts
. Entre ellos tenemos el SimpleLayout
, que simplemente muestra la prioridad y el mensaje, u otros más elaborados como PatternLayout
que nos deja formatear con total libertad la información que podemos mostrar de entre toda la que nos permite Log4j.
Para configurar el registro en general disponemos de tres opciones, las clases BasicConfigurator
, PropertyConfigurator
y DOMConfigurator
. La primera utiliza un Layout
predefinido para ir mostrando el registro por pantalla. Con las otras dos podremos usar un fichero de configuración normal para la primera, y un fichero XML ya parseado para la segunda.
Finalmente, para determinar lo que Log4j debe de hacer con la información del registro, están los Appenders
. Entre estos disponemos de una gran variedad, que cubrirá casi con toda seguridad todas sus necesidades. Podemos escribir en un OutputStream
con WriterAppender
, en ficheros con FileAppender
, en ficheros de registro de como máximo un tamaño con RollingFileAppender
, podemos enviar por correo la información con SMTPAppender
, o registrarle en un servidor especial para Log4j, cuyas clases por supuesto se incluyen, con SocketAppender
, o incluso a un daemo syslog con SyslogAppender
. No sólo eso, también se pueden enviar a varios sitios a la vez, con lo que las posibilidades son tremendas.
Un ejemplo básico (extraído de la documentación).
import com.foo.Bar;
// Importar las clases de log4j.
import org.apache.log4j.Category;
import org.apache.log4j.BasicConfigurator;
public class MyApp {
// Define una variable estática de categoría que referencia
// a la instancia de Category llamada "MyApp"
static Category cat = Category.getInstance(MyApp.class.getName());
public static void main(String[] args) {
// Configuración básica que imprime en la consola
BasicConfigurator.configure();
cat.info("Entrando en la aplicación.");
Bar bar = new Bar();
bar.doIt();
cat.info("Saliendo de la aplicación.");
}
}
La clase com.foo.bar:
package com.foo;
import org.apache.log4j.Category;
public class Bar {
static Category cat = Category.getInstance(Bar.class.getName());
public void doIt() {
cat.debug("Hazlo de nuevo!");
}
}
Al ejecutar MyApp, la salida sería:
0 [main] INFO MyApp - Entrando en la aplicación.
36 [main] DEBUG com.foo.Bar - Hazlo de nuevo!
51 [main] INFO MyAqpp - Saliendo de la aplicación.
Próximo artículo.
En el próximo artículo veremos el PatternLayout
que se utiliza en BasicConfigurator para obtener esta salida, y aprenderemos a crear una configuración y un registro más avanzados.
|