Log4j 2 / SLF4J para Java: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Qué es esta biblioteca y para qué sirve

\n\n

Log4j 2 y SLF4J son dos bibliotecas interconectadas para el registro de logs en Java, que son el estándar de facto en el mundo del desarrollo empresarial. SLF4J (Simple Logging Facade for Java) es una fachada (abstracción) que proporciona una API unificada para diferentes frameworks de logging. Log4j 2 es una de las implementaciones más potentes y eficientes de esta API.

\n\n

¿Para qué sirve? El logging es el proceso de registrar información sobre el funcionamiento de una aplicación: errores, advertencias, mensajes informativos, información de depuración. Sin un sistema de logging, los desarrolladores se ven obligados a usar System.out.println(), lo que conlleva:

\n
    \n
  • Imposibilidad de gestionar la salida de forma flexible (activar/desactivar logs para diferentes partes de la aplicación)
  • \n
  • Falta de niveles de logging (INFO, WARN, ERROR, DEBUG)
  • \n
  • Problemas de rendimiento (concatenación de cadenas incluso cuando los logs están desactivados)
  • \n
  • Falta de formatos de salida (fecha, hora, nombre de clase, hilo)
  • \n
\n\n

Log4j 2 resuelve todos estos problemas. Soporta logging asíncrono, filtros, appenders (salida a archivo, consola, base de datos, red), rotación de logs y muchas otras funciones avanzadas. SLF4J permite, si es necesario, cambiar de Log4j 2 a Logback o java.util.logging sin modificar el código.

\n\n

Instalación

\n\n

Para proyectos Java, la instalación se realiza a través de sistemas de compilación Maven o Gradle. A diferencia de Python (pip) o Node.js (npm), en Java se utiliza la gestión de dependencias mediante archivos de configuración.

\n\n

Maven (pom.xml)

\n
<!-- SLF4J API + Log4j 2 como implementación -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-slf4j-impl</artifactId>\n    <version>2.20.0</version>\n</dependency>\n\n<!-- API principal de Log4j 2 (si no usas SLF4J) -->\n<dependency>\n    <groupId>org.apache.logging.log4j</groupId>\n    <artifactId>log4j-core</artifactId>\n    <version>2.20.0</version>\n</dependency>
\n\n

Gradle (build.gradle)

\n
dependencies {\n    implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0'\n    implementation 'org.apache.logging.log4j:log4j-core:2.20.0'\n}
\n\n

Después de agregar las dependencias, cree un archivo de configuración log4j2.xml en la carpeta src/main/resources:

\n
<?xml version="1.0" encoding="UTF-8"?>\n<Configuration status="WARN">\n    <Appenders>\n        <Console name="Console" target="SYSTEM_OUT">\n            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>\n        </Console>\n    </Appenders>\n    <Loggers>\n        <Root level="info">\n            <AppenderRef ref="Console"/>\n        </Root>\n    </Loggers>\n</Configuration>
\n\n

Inicio rápido con ejemplo de código

\n\n

Cree una clase Java simple para la demostración:

\n
import org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\npublic class QuickStart {\n    // Creamos el logger para la clase actual\n    private static final Logger logger = LoggerFactory.getLogger(QuickStart.class);\n\n    public static void main(String[] args) {\n        logger.info("Aplicación iniciada");\n        logger.debug("Este es un mensaje de depuración");\n        logger.warn("Advertencia: los recursos se están agotando");\n        logger.error("Error crítico: {}", "división por cero");\n\n        try {\n            int result = 10 / 0;\n        } catch (ArithmeticException e) {\n            logger.error("Error al calcular", e);\n        }\n    }\n}
\n\n

La salida en consola se verá así:

\n
14:30:15.123 [main] INFO  QuickStart - Aplicación iniciada\n14:30:15.125 [main] WARN  Q                    

Recommendations