Saltar al contenido principal

Personalización de Logging en Consola para Spring Boot

Contexto​

La salida de logs por defecto en Spring Boot incluye información redundante —corchetes vacíos, formatos de fecha verbose— que dificulta la lectura rápida durante desarrollo. Personalizar el patrón mejora la experiencia y facilita identificar información relevante.

Objetivo​

Configurar un formato de log limpio y útil para consola que elimine elementos innecesarios, simplifique la fecha y preserve lo esencial: nivel, logger y mensaje.

Alcance​

Incluye​

  • Configuración de patrones en application.properties / application.yml.
  • Eliminación de corchetes y elementos redundantes.
  • Formato de fecha personalizado.
  • Colores ANSI para legibilidad.
  • Configuración por perfiles (dev, prod).

No incluye​

  • Logging a archivo (rolling, rotación).
  • Logging distribuido (ELK, Loki, Graylog).
  • Cambios dinámicos de nivel en runtime.

Detalle​

Configuración Básica​

Opción 1 — application.properties​

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n

Opción 2 — application.yml (recomendado)​

logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"

Formato Optimizado​

Formato ISO-8601 sin milisegundos y sin corchetes vacíos:

logging.pattern.console=%d{yyyy-MM-dd'T'HH:mm:ss} %-5level %logger{36} - %msg%n

Componentes del Patrón​

PatrónDescripciónEjemplo
%d{...}Fecha con formato personalizado2024-01-15T10:30:45
%-5levelNivel alineado a 5 caracteres a la izquierdaINFO, ERROR
%logger{36}Nombre del logger truncado a 36 caracteresc.m.a.s.UserService
%msg / %mMensaje del logUsuario creado: 123
%nNueva línea (multiplataforma)—
%thread / %tNombre del hilomain
%X{...}Valor de MDCtraceId=abc123

Configuración con Colores​

spring.output.ansi.enabled=ALWAYS
logging.pattern.console=%clr(%d{yyyy-MM-dd'T'HH:mm:ss}){blue} %clr(%-5p) %clr(---){faint} %clr(%logger{36}){cyan} %clr(:){red} %clr(%m){faint}%n

Colores Disponibles​

ColorUso recomendado
blueTimestamp
greenNivel INFO
yellowNivel WARN
redNivel ERROR / separadores críticos
cyanNombre del logger
magentaHilos / contexto
faintSeparadores y elementos decorativos

Spring Boot colorea automáticamente %clr(%-5p) según el nivel cuando spring.output.ansi.enabled=ALWAYS.

Ejemplos de Salida​

Formato por defecto (verbose):

2024-01-15 10:30:45.123 INFO 12345 --- [ main] c.m.a.service.UserService : Usuario creado: 123

Formato personalizado limpio:

2024-01-15T10:30:45 INFO com.myapp.service.UserService - Usuario creado: 123

Formato con colores (ilustrativo):

[azul]2024-01-15T10:30:45[/] [verde]INFO [/] [tenue]---[/] [cian]c.m.a.s.UserService[/] [rojo]:[/] [tenue]Usuario creado: 123[/]

Configuración por Perfiles​

# application.yml
spring:
profiles:
active: dev

---
spring:
config:
activate:
on-profile: dev
output:
ansi:
enabled: ALWAYS
logging:
pattern:
console: "%clr(%d{HH:mm:ss.SSS}){blue} %clr(%-5p) %clr(%logger{20}){cyan} - %msg%n"
level:
root: DEBUG
com.myapp: TRACE

---
spring:
config:
activate:
on-profile: prod
output:
ansi:
enabled: NEVER
logging:
pattern:
console: "%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %-5level [%X{traceId:-}] %logger{36} - %msg%n"
level:
root: WARN
com.myapp: INFO

MDC para Trazabilidad​

Incluir traceId / spanId en el patrón facilita correlación de requests:

logging.pattern.console=%d{yyyy-MM-dd'T'HH:mm:ss} %-5level [%X{traceId:-},%X{spanId:-}] %logger{36} - %msg%n

Decisiones​

  • Formato ISO-8601 yyyy-MM-dd'T'HH:mm:ss: sin milisegundos en desarrollo para reducir ruido.
  • application.yml sobre .properties: jerárquico y más legible.
  • Colores solo en desarrollo: se desactivan en producción para evitar caracteres ANSI en pipelines de logs.
  • %-5level con alineación izquierda: consistencia visual independiente del nivel.
  • %logger{36}: balance entre contexto útil y concisión.
  • Perfiles separados (dev / prod): distinto nivel de verbosidad y formato según entorno.

Pendientes​

  • Configurar logging estructurado en JSON para integración con ELK / Loki.
  • Implementar MDC con traceId por request (filtro Servlet / interceptor).
  • Evaluar Log4j2 vs. Logback para escenarios de alto throughput.
  • Documentar rotación de logs en producción (archivo + tamaño/tiempo).

Referencias​