Un Log es un registro de eventos durante un rango de tiempo en particular. En seguridad informática es usado para registrar datos o información sobre quién, qué, cuándo, dónde y por qué un evento ocurre para un dispositivo en particular o aplicación.

A medida que un programa informático crece, es importante registrar su trazabilidad para detectar posibles errores, para saber por dónde está pasando o bien para conocer cómo se está ejecutando.

Existen multitud de librerías que implementan un Log, pero en Java la más utilizada es sin duda Log4J (Log for Java). Se puede usar directamente en cualquier proyecto, pero… ¿y si algún día queremos registrarlo con otra librería que no sea esta o cambiar su configuración sin modificar nuestro proyecto? la solución se llama SLF4J (Simple Logger Facade 4 Java) y se trata de una fachada que admite multitud de loggers (entre ellos Log4J).

En este turorial vamos a ver cómo añadir Log4J usando SFL4J, vamos a ello:

vincular librerías

Lo primero que debemos de hacer es descargar las librerías y vincularlas a nuestro proyecto, para ello nos descargamos: «log4j.jar», «sfl4j-api.jar» y «slf4j-log4j.jar» desde la web de SFL4J y Log4J. Después, lo copiamos en la carpeta /lib de nuestro proyecto y lo vinculamos a nuestro proyecto.

incluirlo en el código

Creamos una clase cualquiera, en mi caso Principal.java e importamos Logger y LoggerFactory, también creamos una variable estática y en parámetro getLogger, ponemos el nombre de nuestra clase seguido de .class, en mi caso (Principal.class) y ya podremos incluir loggers (debug, info, trace, warn y error) en nuestra clase.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Principal{
 
/**
* Logger.
*/
private static final Logger logger = LoggerFactory.getLogger(Principal.class);
 
//Debug.
logger.debug("Depuracion");
 
//Info.
logger.info("Informacion");
 
//Trace.
logger.trace("Traza");
 
//Warning.
logger.warn("Advertencia");
 
//Error.
logger.error("Error");
}

Pero nos queda configurar Log4J.

configuración

La configuración de Log4J es una maravilla. Permite modificar la salida del Log a un fichero, consola, filtrar el log por debug, info, error…etc y también crear múltiples ficheros Log rotativos para que cuando se llene uno, vaya al siguiente y así sucesivamente hasta un límite establecido, de esta manera no llenaremos el disco del equipo con estos ficheros.
En mi caso, tengo este fichero de configuración: log4j.xml situado en /src de mi proyecto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="uneFicherosInfo" class="org.apache.log4j.RollingFileAppender">
        <param name="MaxFileSize" value="100KB" />
        <param name="MaxBackupIndex" value="5" />
        <param name="Threshold" value="INFO" />
        <param name="File" value="log/salida.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d  %-5p  [%c{1}] %m %n" />
        </layout>
    </appender>
 
    <root>
        <priority value="info" />
        <appender-ref ref="uneFicherosInfo" />
    </root>
</log4j:configuration>
  • RollingFileAppender: concatena el Log para no perder información de instancias anteriores.
  • MaxFileSize: tamaño máximo de cada fichero Log.
  • MaxBackupIndex: número de ficheros Log para almacenar la información.
  • Threshold: nivel de Log a captar.
  • File: directorio y fichero de salida.
  • ConversionPattern: patrón formateador usado para escribir en el fichero.

resultado

Con el ejemplo anterior se crean 5 ficheros «salida.log» que se van a ir renombrando hasta un máximo de 5, cada uno de ellos no va a ocupar más de 100KB, cuando acabe el 5º, vuelve al primero y lo machaca. Además todos ellos se van a guardar en la carpeta /log.

El Log, se puede personalizar todo lo que queráis, si buscáis más información por internet, veréis diferentes formas de hacerlo y muchísimas más configuraciones (también con un fichero de propiedades).