log4j の NDC って使えるかも

Web 系のアプリとか、単一のユーザーオペレーションをスレッドに結びつけるようなアプリの場合、log4j の NDC って使えるかも。ユーザーIDのような情報とか表示させると、ログ解析が楽になるかな?

まだドキュメントちゃんと読んでないので、正しい使い方かどうか分からんケド (´・ω・`)

log4j依存になっちゃうけど、アプリケーション層内部なら問題なさそう。

Nested Diagnostic Context

ソース

テストプログラム
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.NDC;

public class Main {
    
    public static void main(String[] args) {
        
        Log log = LogFactory.getLog(Main.class);
        
        // スレッドに情報をバインド
        NDC.push("This is NDC value.");
        
        // ログ出力
        log.debug("This is debug message.");
        
    }
    
}
log4j.properties
log4j.rootLogger=DEBUG, ROOT
log4j.appender.ROOT=org.apache.log4j.ConsoleAppender
log4j.appender.ROOT.layout=org.apache.log4j.PatternLayout
log4j.appender.ROOT.layout.ConversionPattern=%d{ISO8601} [%p] %c (%F:%L) %t NDC[%x] : %m%n

結果

2008-06-16 03:23:41,765 [DEBUG] Main (Main.java:15) main NDC[This is NDC value.] : This is debug message.