ここrequestId
に示すように、Web アプリのログにを追加しようとしています。
public class MDCFilter implements ContainerRequestFilter, ContainerResponseFilter
{
private static final String CLIENT_ID = "client-id";
@Context
protected HttpServletRequest r;
@Override
public void filter(ContainerRequestContext req) throws IOException
{
Optional<String> clientId = Optional.fromNullable(r.getHeader("X-Forwarded-For"));
MDC.put(CLIENT_ID, clientId.or(defaultClientId()));
}
@Override
public void filter(ContainerRequestContext req, ContainerResponseContext resp) throws IOException
{
MDC.remove(CLIENT_ID);
}
private String defaultClientId()
{
return "Direct:" + r.getRemoteAddr();
}
}
これに関する問題は、上記のフィルターで設定および削除する requestId
ことです。MDC
また、アプリケーションが生成する応答の本文もWriterInterceptor
. 問題は、インターセプターが filtersの後に実行されるため、 myWriterInterceptor
が実行されるまでに requestId が にないことですMDC
。
MDC.clear()
私の質問は、最後に呼び出しても大丈夫ですWriterInterceptor
か (これはなんとなくハックに感じます)、またはこれを達成するためのより良い方法はありますか?