2016-11-01 4 views
0

У меня есть приложение Spring MVC, в котором я реализовал класс, который расширяет HandlerInterceptorAdapter для выполнения некоторых операций внутри preHandle, postHandle и afterCompletion до того, как какой-либо контроллер будет выполнен. ниже - это то, что я наблюдаю.Spring MVC HandlerInterceptorAdapter Отсутствует slf4j Logback Trace ID

Вход в журнал для предварительной регистрации леса AppTime: 00: 30: 01.230 | Тема: [http-nio-8080-exec-1] | Уровень: INFO | Класс: hello.extractor | X-Span-Export = false, X-B3-SpanId = 3aad3f52e26eb59d, X-B3-TraceId = 3aad3f52e26eb59d | Msg: Внутри preHandle

Вход Вход для postHandle регистрации AppTime: 00: 30: 01.394 | Тема: [http-nio-8080-exec-1] | Уровень: INFO | Класс: hello.extractor | X-Span-Export = false, X-B3-SpanId = 3aad3f52e26eb59d, X-B3-TraceId = 3aad3f52e26eb59d | Msg: Внутри postHandle

Вход Вход для afterCompletionlogging AppTime: 00: 30: 01.395 | Тема: [http-nio-8080-exec-1] | Уровень: INFO | Класс: hello.extractor | | Msg: Внутри afterCompletion.

Если вы видите, что в третьей записи отсутствует идентификатор трассировки и идентификатор пробела. Любая идея о том, как разрешить это?

общественного класс Extractor расширяет 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"); 
} 

}

+0

показать свой код для 'HandlerInterceptorAdapter' и соответствующей конфигурации журнала –

+0

Можете ли вы разместить свой полный образец где-нибудь? У вас есть тот же поток, но, похоже, кажется, что 'afterCompletion'' TraceHandlerInterceptor' закрыл диапазон до того, как он достиг вашего обработчика. Вы должны убедиться, что ваш перехватчик выполнен до «TraceHandlerInterceptor». Но, не видя образца, это только мои предположения. –

+0

Здравствуйте. Я добавил пример кода. @MarcinGrzejszczak –

ответ

0

я обнаружил, что мы добавили еще один HandlerIntercepter, который делает MDC рубки и внутри в нем мы были вручную клиринговым, которая вызывает не заполнять след id в моем другом методе aftercompleter HandlerIntercepter. Также, если вы используете несколько перехватчиков обработчиков и последовательность, которую вы регистрируете. В последнюю весну вы объявите их в обратном порядке, чтобы они выполнялись один за другим.

Смежные вопросы