Я обнаружил, что контекст Log4j (SL4J) MDC можно настроить поточно-безопасным способом в общем фильтре (код из Добавление информации о пользователе в записи журнала в мультипользовательском приложении -user приложение, использующее 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
является потокобезопасной, поэтому, если приведенный выше код нормально работает в фильтре, теоретически он должен работать в потокобезопасном перехватчике.
Любые комментарии ?!