我正在尝试将一个添加到我的网络应用程序的日志中,如此处requestId
所示。
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
. 问题是,由于拦截器在过滤器之后运行,所以当我WriterInterceptor
执行时,没有 requestId 在MDC
.
MDC.clear()
我的问题是,是否可以在结束时打电话WriterInterceptor
(感觉有点骇人听闻),还是有更好的方法来实现这一点?