Documentation for a newer release is available. View Latest

Configuración dinámica del nivel de logs

El propósito de esta página es explicar cómo se pueden cambiar los niveles de logging durante el tiempo de ejecución, de modo que no tengas que reiniciar tu aplicación para cambiar un nivel de log. Lo lograremos usando la librería actuator.

Para usar actuator, debes tener la siguiente dependencia (ya incluida en ipf-common-starter-core):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Cuando tu aplicación esté levantada y en ejecución, de esta manera puedes comprobar qué loggers tienes:

Supón que tienes un paquete com.sample y quieres comprobar su nivel de log. Puedes consultar el siguiente endpoint (vía navegador o usando el comando curl):

{"configuredLevel":"INFO","effectiveLevel":"INFO"}

Esto significa que tu nivel configurado y el nivel efectivo están establecidos en INFO. A diferencia de configuredLevel, effectiveLevel debe estar presente. Por defecto se establecerá por el nivel padre, mientras que configuredLevel será null (por lo que puede parecer que solo tienes):

{"effectiveLevel":"INFO"}

Cuando configuredLevel se ha establecido con un valor no nulo, effectiveLevel tomará su valor. Por lo tanto, al cambiar el nivel de log para un logger en particular (por ejemplo, com.sample), en realidad hacemos el cambio en el campo configuredLevel.

curl 'http://localhost/actuator/loggers/com.sample' -i -X POST \
-H 'Content-Type: application/json' \
-d '{"configuredLevel":"DEBUG"}'

Ahora si miramos http(s)://localhost/actuator/loggers/com.sample:

{"configuredLevel":"DEBUG","effectiveLevel":"DEBUG"}

Eso cubre el ajuste del nivel de log. Ahora bien, si no es visible dentro de los logs de la aplicación, podría ser que necesites reconfigurar tu archivo logback.xml. Por ejemplo, puede ocurrir que tengas un filtrado, por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    ...
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        ...
    </appender>
    ...
</configuration>

Entonces, para ver logs en DEBUG, podrías cambiar el valor de la etiqueta <level> a "DEBUG" o eliminar la etiqueta <filter> completamente.