Logback - 各スレッドの異なるログファイル

ログバック-スレッドごとに異なるログファイル

logback-different-log-for-each-thread

このチュートリアルでは、ログバックMapped Diagnostic Context (MDC)SiftingAppenderを使用して、スレッドごとに個別のログファイルを作成する方法を示します。

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

Note
詳細については、このLogback MDC documentationを参照してください

1. logback.xml example

SiftingAppenderおよびMDCを宣言および構成する方法を示すlogback.xmlファイル。

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. Javaスレッドの例

MDC.putを介して「logFileName」値を宣言した単純なスレッドの例

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

}

10スレッドを開始

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

出力:10スレッドの10個の個別のログファイル。

logback-different-log-for-each-thread

Note
このMDC機能を使用すると、ログインユーザーごと、URI要求ごと、リモートホストごとなどの個別のログファイルに出力をログに記録することもできます。