ログバック-スレッドごとに異なるログファイル
このチュートリアルでは、ログバック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個の個別のログファイル。
Note
このMDC機能を使用すると、ログインユーザーごと、URI要求ごと、リモートホストごとなどの個別のログファイルに出力をログに記録することもできます。