Configuration avancée de Logback pour la gestion des fichiers journaux dans Spring Boot

Logback, créé par l'auteur de Log4j, représente une évolution significative en termes de performance et d'efficacité. Il offre une amélioration de performance d'environ 10 fois par rapport à Log4j, tout en consommant moins de mémoire. Son implémentation complète de l'API SLF4J facilite grandement le passage d'autres frameworks de journalisation.

Spring Boot intègre Logback par défaut, permettant une utilisation immédiate. Pour des projets de taille petite à moyenne, Logback est un choix recommandé.

Mise en œuvre de la journalisation avec Logback

Aucune dépendance supplémentaire n'est requise dans le fichier pom.xml pour l'utilisation de Logback dans un projet Spring Boot.

La configuration personnalisée se fait via le fichier src/main/resources/logback-spring.xml.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- Définition du répertoire et du nom du fichier journal -->
    <property name="LOG_DIR" value="application_logs" />
    <property name="LOG_FILENAME" value="application.log" />

    <!-- Configuration de la politique de rotation des fichiers journaux -->
    <appender name="FILE_ROLLING_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/${LOG_FILENAME}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- Nommage des fichiers journaux archivés -->
            <fileNamePattern>${LOG_DIR}/${LOG_FILENAME}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- Durée de conservation des anciens fichiers journaux -->
            <maxHistory>10</maxHistory>
            <!-- Taille maximale totale des fichiers journaux archivés -->
            <totalSizeCap>2GB</totalSizeCap>
        </rollingPolicy>
        <!-- Formatage des messages de journalisation -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger.%method:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Configuration de l'appender pour la sortie console -->
    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger.%method:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Configuration du logger racine -->
    <root level="INFO">
        <!-- Association des appenders au logger racine -->
        <appender-ref ref="FILE_ROLLING_APPENDER" />
        <appender-ref ref="CONSOLE_APPENDER" />
    </root>

</configuration>

L'CONSOLE_APPENDER est explicitement configuré pour rétablir la sortie des journaux sur la console. Il est important de noter que la configuration d'une politique de rotation des fichiers journaux peut parfois désactiver la sortie console par défaut, nécessitant une re-configuration manuelle.

Il est également à considérer que l'envoi des journaux à la fois dans un fichier et sur la console augmente la charge système. Pour optimiser les ressources, la section relative à CONSOLE_APPENDER peut être commentée, désactivant ainsi la sortie console.

Pour tester la configuration, vous pouvez implémenter un endpoint dans votre application qui génère des messages de journalisation :

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
public class LogController {

    private static final Logger logger = LoggerFactory.getLogger(LogController.class);

    // Utilisation d'un ThreadLocal pour une gestion efficace du SimpleDateFormat
    private static final ThreadLocal<SimpleDateFormat> DATE_FORMATTER =
            ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

    @GetMapping("/generate-log")
    public String generateLogMessage() {
        String timestampedMessage = "Log Event at " + DATE_FORMATTER.get().format(new Date());
        logger.info("Generated log event: {}", timestampedMessage);
        return "Log message generated. Check console and log file.";
    }
}

Après avoir déclenché ce endpoint via un outil de requête HTTP, vous observerez la création d'un répertoire application_logs à la racine de votre projet, contenant le fichier application.log. Les messages enregistrés dans le fichier seront identiques à ceux affichés sur la console, confirmant le bon fonctionnement de la configuration.

Étiquettes: logback Spring Boot Gestion des logs Rotation des fichiers journaux Configuration

Publié le 22 juillet à 15h37