Configuración de Logback
Appenders, patrones y niveles
Configuración de Logback es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
¿Qué es Logback?
Logback es un backend popular de SLF4J, escrito por el mismo autor que Log4j. Es el que realiza realmente el registro que describen las llamadas de SLF4J.
Se configura mediante un archivo llamado logback.xml en el classpath, normalmente en src/main/resources.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback reads logback.xml at startup");
}
}Tres componentes básicos
La configuración de Logback tiene tres conceptos principales:
- Logger: origen con nombre de los eventos de log, con un nivel.
- Appender: un destino, como la consola o un archivo.
- Encoder/Layout: da formato al evento y lo convierte en texto.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("logger -> appender -> encoder -> output");
}
}Un appender de consola
La configuración más sencilla envía todo a la consola. El patrón del encoder controla el formato de cada línea.
Este XML se encuentra en logback.xml, no en su código Java.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>Entender el patrón
Las palabras de conversión del patrón comienzan con %:
%d: marca de tiempo;%level: nivel.%logger: nombre del logger;%thread: hilo.%msg: su mensaje;%n: un salto de línea.
%-5level añade espacios a la izquierda del nivel hasta alcanzar una anchura de 5.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
// Output rendered by pattern: time LEVEL logger - message
log.info("hello");
}
}El logger raíz y los niveles
El elemento <root> establece el nivel predeterminado para toda la aplicación y los appenders en los que escribe.
Establecer level="info" significa que se emiten INFO, WARN y ERROR; DEBUG y TRACE se suprimen.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>Niveles por paquete
Añada un elemento <logger> para sobrescribir el nivel de un paquete. Esto le permite habilitar DEBUG para su propio código mientras mantiene silenciosas las bibliotecas.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.app" level="debug" />
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>Un appender de archivos rotativos
En producción, normalmente se escribe en archivos que rotan a diario o por tamaño, para que los logs no crezcan indefinidamente.
RollingFileAppender con una política basada en el tiempo crea un archivo por día y conserva un historial limitado.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>Varios appenders a la vez
El logger raíz puede hacer referencia a varios appenders, por lo que los logs se envían simultáneamente a la consola y a un archivo.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %msg%n</pattern></encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>Mostrar el MDC
Para incluir contexto del MDC, como un identificador de solicitud, en cada línea, añada %X{key} al patrón.
A continuación, cualquier valor que coloque en el MDC aparecerá automáticamente.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
MDC.put("requestId", "req-1234");
// Pattern: %X{requestId} %-5level %msg%n
log.info("handled");
MDC.clear();
}
}Aditividad
De forma predeterminada, los eventos de un logger también se envían a los appenders de sus ancestros. Esto se denomina aditividad.
Si un logger de paquete tiene su propio appender y no desea una salida duplicada, establezca additivity="false" en él.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
</appender>
<logger name="com.example.audit" level="info" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="warn">
<appender-ref ref="STDOUT" />
</root>
</configuration>Recarga automática y variables
Logback puede volver a cargar periódicamente la configuración mediante <configuration scan="true">, lo que resulta útil para cambiar los niveles sin reiniciar.
También puede leer propiedades, como un directorio de logs, mediante marcadores de posición ${LOG_DIR}.
<configuration scan="true" scanPeriod="30 seconds">
<property name="LOG_DIR" value="logs" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_DIR}/app.log</file>
<encoder><pattern>%d %-5level %msg%n</pattern></encoder>
</appender>
<root level="info"><appender-ref ref="FILE" /></root>
</configuration>Comprobación rápida
Compruebe sus conocimientos sobre la configuración de Logback.
Repaso
Ha aprendido a configurar Logback:
- La configuración se encuentra en
logback.xml, con loggers, appenders y encoders. - Los patrones dan formato a las líneas con
%d,%level,%msgy%X{}. - RollingFileAppender rota los logs; establezca niveles por paquete y la aditividad.
- Habilite
scanpara la reconfiguración en tiempo real.
Ha completado el curso sobre registro.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private static final Logger log = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
log.info("Logback configuration course complete");
}
}Preguntas frecuentes
¿La lección «Configuración de Logback» es gratis?
Sí — el texto completo de «Configuración de Logback» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Configuración de Logback»?
Appenders, patrones y niveles Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Configuración de Logback»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué usar logging estructurado
- Fachada y loggers de SLF4J
- Logging parametrizado
- Configuración de Logback