Logback - fichier journal différent pour chaque thread

Logback - fichier journal différent pour chaque thread

logback-different-log-for-each-thread

Dans ce didacticiel, nous allons vous montrer comment utiliser LogbackMapped Diagnostic Context (MDC) etSiftingAppender pour créer un fichier journal distinct pour chaque thread.

P.S Tested with Logback 1.1.2, should work in earlier version.

Note
Plus d'infos, reportez-vous à ceLogback MDC documentation

1. logback.xml example

Un fichierlogback.xml pour vous montrer comment déclarer et configurerSiftingAppender etMDC.

logback.xml




    

    

        
        
        
            logFileName
            head0
        

        

          
          
            ${USER_HOME}/${logFileName}.log

            
                
                    %d{yyyy-MM-dd HH:mm:ss} %mdc [%thread] %level %logger{35} - %msg%n
                
            

            
                ${USER_HOME}/${logFileName}.%i.log.zip
                
                1
                10
            

            
                10MB
            

          

        
    

    
        
            
                %-5level %logger{36} - %msg%n
            
        
    

    
        
        
    

    
        
    

2. Exemple de threads Java

Un exemple de thread simple, a déclaré la valeur ‘logFileName’ viaMDC.put

Head.java

package com.example.analyzer.core;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class Head implements Runnable {

    static Logger logger = LoggerFactory.getLogger(Head.class);

    private String name;

    @Override
    public void run() {

        MDC.put('logFileName', getName());

        logger.debug("hello");

        //remember remove this
        MDC.remove('logFileName');

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Démarrer 10 discussions

    int count = 1;
    while(count<=10){
        Head head = new Head();
        head.setName("head-" + count);
        threadPools.execute(head);
        count++;
    }

Sortie: 10 fichiers journaux distincts pour 10 threads.

logback-different-log-for-each-thread

Note
Avec cette fonction MDC, vous pouvez même enregistrer la sortie dans un fichier journal distinct pour chaque utilisateur de connexion, chaque demande d'URI, chaque hôte distant, etc.