
Configuration avancée via fichiers dédiés (logback-spring.xml, log4j2-spring.xml)
Maîtrisez la configuration avancée du logging dans Spring Boot avec les fichiers dédiés logback-spring.xml ou log4j2-spring.xml pour un contrôle total.
Dépasser les limites de la configuration par propriétés
La configuration du logging via les fichiers `application.properties` ou `application.yml` est pratique pour des ajustements simples et rapides, comme définir les niveaux de log pour des packages spécifiques ou spécifier un fichier de log de base. Cependant, dès que les besoins deviennent plus complexes, cette approche montre ses limites. Il est difficile, voire impossible, de définir des stratégies de rotation de fichiers sophistiquées, de configurer plusieurs appenders (destinations de log) avec des formats différents, d'appliquer des filtres spécifiques ou de mettre en place des configurations radicalement différentes selon les profils Spring actifs uniquement via les propriétés.
Pour obtenir un contrôle total et fin sur le comportement du framework de logging sous-jacent (Logback ou Log4j2), Spring Boot supporte l'utilisation de fichiers de configuration dédiés dans leur format natif (généralement XML). Ces fichiers vous permettent d'exploiter toute la puissance et la flexibilité du framework de logging choisi.
Spring Boot recherche automatiquement ces fichiers de configuration dédiés sur le classpath. Pour Logback (le framework par défaut), il cherchera `logback-spring.xml`, `logback-spring.groovy`, `logback.xml`, ou `logback.groovy`. Pour Log4j2, il cherchera `log4j2-spring.xml` ou `log4j2.xml`. La convention recommandée est d'utiliser les versions avec le suffixe `-spring` (`logback-spring.xml`, `log4j2-spring.xml`) car elles permettent de bénéficier d'extensions spécifiques à Spring Boot, comme la configuration basée sur les profils ou l'accès aux propriétés de l'application.
Configuration avancée de Logback avec `logback-spring.xml`
Si vous utilisez Logback (par défaut ou via `spring-boot-starter-logging`), placez un fichier nommé `logback-spring.xml` à la racine de votre classpath (typiquement `src/main/resources`). Ce fichier XML vous donne un contrôle complet sur la configuration de Logback.
La structure de base d'un fichier `logback-spring.xml` comprend les éléments suivants :
- `
` : L'élément racine du fichier. - `
` : Définit une destination pour les logs (ex: console, fichier). Vous pouvez en définir plusieurs. Attributs clés : `name` (identifiant unique), `class` (type d'appender, ex: `ch.qos.logback.core.ConsoleAppender`, `ch.qos.logback.core.rolling.RollingFileAppender`). - `
` / ` Définit le format des messages de log au sein d'un appender. Souvent un `` : ` est utilisé. - `
` : Définit le niveau de log et les appenders associés pour un logger spécifique (généralement un nom de package ou de classe). Attributs clés : `name`, `level` (TRACE, DEBUG, INFO, WARN, ERROR), `additivity` (true/false, pour hériter ou non des appenders du parent). - `
` : Le logger racine, qui s'applique par défaut si aucun logger spécifique ne correspond. Attribut clé : `level`.
Exemple simple d'un appender console :
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
Exemple d'un appender fichier avec rotation basée sur le temps et la taille :
logs/my-app.log
logs/archived/my-app-%d{yyyy-MM-dd}.%i.log.gz
30
10MB
1GB
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
Définition des loggers et du root :
L'attribut `additivity="false"` empêche les messages du logger `com.exemple.myapp` d'être également traités par les appenders du logger parent (ici, le root).
Spring Boot enrichit la configuration Logback avec des balises spécifiques dans `logback-spring.xml` :
- `
` : Permet d'inclure des sections de configuration uniquement si certains profils Spring sont actifs. Très utile pour avoir des logs différents en dev, test, et prod. - `
` : Permet de lire une propriété depuis l'environnement Spring (fichier `application.properties`, variables d'environnement, etc.) et de l'utiliser dans la configuration Logback (ex: pour définir le chemin d'un fichier de log).
Exemple combinant ces éléments :
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${LOG_PATH}/my-app.log
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${LOG_PATH}/archived/my-app-%d{yyyy-MM-dd}.%i.log.gz
30 10MB 1GB
Configuration avancée de Log4j2 avec `log4j2-spring.xml`
Si vous préférez utiliser Log4j2, vous devez d'abord exclure Logback des dépendances Spring Boot (si `spring-boot-starter-logging` est utilisé) et inclure le starter `spring-boot-starter-log4j2`. Ensuite, placez un fichier `log4j2-spring.xml` (ou `log4j2.xml`) à la racine du classpath (`src/main/resources`).
La structure d'un fichier `log4j2-spring.xml` est différente de celle de Logback mais suit des concepts similaires :
- `
` : L'élément racine. L'attribut `status` contrôle le niveau de log interne de Log4j2 lui-même. - `
` / ` Permet de définir des variables réutilisables dans la configuration.` : - `
` : Contient la définition des différents appenders (Console, File, RollingFile, etc.). - `
` : Contient la définition des loggers spécifiques (``) et du logger racine (` `).
Exemple d'un appender Console :
Exemple d'un appender `RollingFile` :
%d %p %c{1.} [%t] %m%n
Définition des loggers :
Log4j2 propose également des mécanismes d'intégration avec Spring Boot, notamment via le 'Spring Profile Arbiter' ou le 'Spring Lookup'. Le Spring Lookup permet d'accéder aux profils actifs et aux propriétés de l'environnement Spring directement dans la configuration Log4j2 en utilisant la syntaxe `${spring:propertyName}` ou `${spring:profiles}`.
Exemple utilisant le Spring Lookup pour adapter le niveau de log :
Cet exemple montre comment utiliser une propriété Spring (`myapp.log.level`) avec une valeur par défaut, et comment ajuster conditionnellement le niveau de log de `org.hibernate.SQL` en fonction de l'activation du profil `dev`.
Avantages et considérations
L'utilisation de fichiers de configuration dédiés (`logback-spring.xml`, `log4j2-spring.xml`) offre une flexibilité et un contrôle inégalés par rapport à la configuration via `application.properties`. Vous pouvez définir des scénarios de logging très spécifiques : différents appenders pour différents niveaux ou packages, formats de log variés, politiques de rotation complexes, filtrage fin des messages, configurations spécifiques aux environnements grâce aux profils Spring, etc.
Cette puissance vient avec une courbe d'apprentissage légèrement plus élevée, car il faut comprendre la syntaxe et les concepts propres à Logback ou Log4j2. Cependant, pour des applications en production ou des besoins de logging non triviaux, l'investissement en vaut largement la peine.
Il est important de noter que si Spring Boot trouve un fichier de configuration dédié (comme `logback-spring.xml`), il l'utilisera et ignorera largement la configuration de logging de base fournie dans `application.properties` (comme `logging.level.*` ou `logging.file.name`). Vous prenez entièrement la main sur la configuration du logging via ce fichier dédié.