一般的なフィルターでスレッド セーフな方法でLog4j (SL4J) MDC コンテキストを設定できることがわかりました( Mapped Diagnostic Context を使用してマルチユーザー アプリでユーザー情報をログに記録するためのコード) 。
import org.slf4j.MDC;
import javax.servlet.*;
import java.io.IOException;
public class MDCFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
User user= (User) session.getAttribute("USerSession");
MDC.put("userName", user.getUserName() );
try {
chain.doFilter(req, resp);
} finally {
MDC.remove("userName");
}
}
}
Struts 2インターセプターで同じアプローチを行うことはできますか?! 私が疑問に思っているのは、スレッドの安全性の問題です。
Struts 2 インターセプターとサーブレット フィルターは両方ともスレッド セーフではなく、MDC
実装もスレッド セーフであるため、上記のコードがフィルターで正常に機能する場合、理論的にはインターセプターでスレッド セーフである必要があります。
コメントはありますか?!