Logback - unterschiedliche Protokolldatei für jeden Thread

Logback - verschiedene Logfiles für jeden Thread

logback-different-log-for-each-thread

In diesem Tutorial zeigen wir Ihnen, wie Sie mit LogbackMapped Diagnostic Context (MDC) undSiftingAppender eine separate Protokolldatei für jeden Thread erstellen.

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

Note
Weitere Informationen finden Sie inLogback MDC documentation

1. logback.xml example

Einelogback.xml-Datei, die Ihnen zeigt, wie SieSiftingAppender undMDC deklarieren und konfigurieren.

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. Beispiel für Java-Threads

In einem einfachen Thread-Beispiel wurde der Wert "logFileName" überMDC.put deklariert

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;
    }

}

Starten Sie 10 Threads

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

Ausgabe: 10 separate Protokolldateien für 10 Threads.

logback-different-log-for-each-thread

Note
Mit dieser MDC-Funktion können Sie die Ausgabe sogar für jeden Anmeldebenutzer, jede URI-Anforderung, jeden Remote-Host usw. in einer separaten Protokolldatei protokollieren.