0

我有 Spring MVC 应用程序,我在其中实现了一个扩展 HandlerInterceptorAdapter 的类,以便我在执行任何控制器之前在 preHandle、postHandle 和 afterCompletion 中执行一些操作。以下是我正在观察的内容。

preHandle 日志记录 AppTime 的日志条目:00:30:01.230 | 线程:[http-nio-8080-exec-1] | 级别:信息 | 类:hello.extractor | X-Span-Export=false,X-B3-SpanId=3aad3f52e26eb59d,X-B3-TraceId=3aad3f52e26eb59d | 消息:内部 preHandle

postHandle 日志记录的日志条目 AppTime: 00:30:01.394 | 线程:[http-nio-8080-exec-1] | 级别:信息 | 类:hello.extractor | X-Span-Export=false,X-B3-SpanId=3aad3f52e26eb59d,X-B3-TraceId=3aad3f52e26eb59d | 消息:内部 postHandle

afterCompletionlogging AppTime 的日志条目:00:30:01.395 | 线程:[http-nio-8080-exec-1] | 级别:信息 | 类:hello.extractor | | 消息:在完成后。

如果您看到第三个条目缺少跟踪 ID 和跨度 ID。关于如何解决这个问题的任何想法?

公共类提取器扩展 HandlerInterceptorAdapter {

private static Logger logger = LoggerFactory.getLogger(HttpHeaderExtractor.class);

@Autowired
public Extractor() {
}

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {

    logger.info("Inside preHandle");
    return true;
}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    logger.info("Inside postHandle");
}

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    logger.info("Inside afterCompletion");
}

}

4

1 回答 1

0

我发现我们添加了另一个正在执行 MDC 日志记录的 HandlerIntercepter,并且在其中我们手动清除了导致在我的另一个 HandlerIntercepter aftercompletion 方法中不填充跟踪 ID。此外,如果您使用多个处理程序拦截器并且您注册的序列很重要。在最近的春天,您将以相反的顺序声明它们,以便它们一一执行。

于 2016-12-10T07:04:19.720 回答