Log4j
- Área: Librerías y Módulos
- Grupo: Librerías para Logging
- Carácter del recurso: Recomendado
- Tecnologías: Java
Descripción
Es una librería de código abierto desarrollada en Java por la Apache Software Foundation que permite a los desarrolladores de software elegir la salida y el nivel de granularidad de los mensajes o logs en tiempo de ejecución y no en tiempo de compilación como se realizaba comúnmente.
Las responsabilidades de este componente son:
- Definir las acciones a registrar
- Definir para cada una de las acciones registradas el nivel de evento.
- Definir las salidas y formato del log
Una de las posibilidades de Log4j es poder imprimir los mensajes en múltiples destinos. En Log4j, el destino de salida se denomina "Appender". A continuación ofrecemos los "appenders" más útiles:
Appender | Descripción |
---|---|
ConsoleAppender | Despliega el log en la consola |
FileAppender | Redirecciona el log a un fichero |
RollingFileAppender | Redirecciona a un archivo con política de rotación para que no se dispare el tamaño del archivo |
DailyRollingFileAppender | Redirecciona a un archivo con política de rotación basadas en la fecha |
SocketAppender | Redirecciona los mensajes a un servidor remoto de log |
SMTPAppender | Envía por mail los logs |
JDBCAppender | Redirecciona los mensajes de log a una base de datos |
SyslogAppender | Redirecciona el log a un demonio remoto syslog en Unix |
NTEventlogAppender | Redirecciona el log hacia el log del sistema NT |
JMSAppender | Serializa los eventos y los transmite como un mensaje tipo JMS |
Existe una capa de Layout que permite al desarrollador definir el formato de los mensajes que se envían por el log. A continuación se comentan los layouts más importantes:
Layout | Descripción |
---|---|
SimpleLayout | Muy básico, consiste en la prioridad del mensaje seguido del contenido del mismo |
PatternLayout | Especifica el formato de salida en función de unos patrones de salida similares a los aplicados en la función "printf" del lenguaje C. |
XMLLayout | Especifica que la salida será en un fichero XML |
HTMLLayout | Especifica que la salida será en una tabla HTML |
TTCCLayaout | Muestra la fecha, categoría, hilo y el mensaje |
Usos y Ventajas conocidas
- Utilizado en la generación de trazas por JBoss
- Aplicaciones comerciales (ejemplo REGAC)
- Framework Principado de Asturias OPENFWPA
Ejemplo de uso
En el siguiente ejemplo la clase MyApp primero importa las clases relacionadas de log4j, luego define una variable estática de tipo Logger con el nombre de la clase MyApp.class y finalmente invoca al método BasicConfigurator.configure que crea una configuración de log4j con un ConsoleAppender y define el PatternLayout a "%-4r %t %-5p %c %x - %m%n".
import com.foo.Bar;
// Importa las clases de log4j.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
public class MyApp {
// Define una variable estática que tiene una referencia
// a una instancia de Logger llamada "MyApp".
static Logger logger = Logger.getLogger(MyApp.class);
public static void main(String[] args) {
// Crea una simple configuración a la consola
BasicConfigurator.configure();
logger.info("Entrando en la aplicación.");
Bar bar = new Bar();
bar.doIt();
logger.info("Saliendo de la aplicación.");
}
}
MyApp utiliza la clase Bar del paquete com.foo, la cual ya no tiene que configurar el log sino únicamente utilizarlo.
package com.foo;
import org.apache.log4j.Logger;
public class Bar {
static Logger logger = Logger.getLogger(Bar.class);
public void doIt() {
logger.debug("Dentro de Bar!");
}
}
La salida en el log sería:
0 [main] INFO MyApp - Entrando en la aplicación.
36 [main] DEBUG com.foo.Bar - Dentro de Bar!
51 [main] INFO MyApp - Saliendo de la aplicación.
Requisitos e incompatibilidades
- log4j-1.2.14.jar debe de estar incluido en el classpath de la aplicación
- log4j.properties debe de estar incluido en el classpath de la aplicación
Enlaces externos
Contenidos relacionados
Código | Título | Tipo | Carácter | |
---|---|---|---|---|
LIBP-0344 | Librerías para aplicaciones Java | Libro de pautas | Directriz | Recomendada |
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0749 | Niveles de Prioridad de Logging | Ficha | Obligatorio |