如何在 Spring 基于 Java 的应用程序中的每个请求中添加唯一的 UUID

How to add unique UUID in every Request in Spring Based Java application

我刚刚开始研究 spring 启动应用程序。 我想将唯一的 UUID 附加到每个 API 请求并将其附加到日志中。

我写了 public class RequestContextListener 实现 ServletRequestListener {

private Logger logger = LoggerFactory.getLogger(getClass());

@Override
public void requestInitialized(ServletRequestEvent arg0) {
    logger.debug("++++++++++++ REQUEST INITIALIZED +++++++++++++++++");
    MDC.put("UUID", UUID.randomUUID());
}

@Override
public void requestDestroyed(ServletRequestEvent arg0) {
    logger.debug("-------------REQUEST DESTROYED ------------");
    MDC.clear();
}

下面是我的logback-spring.xml文件修改

 <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%rEx} [%X{UUID}]"/>

但这对我不起作用。 我是否必须在需要执行的任何地方提及? 请帮忙,我已经在这上面浪费了一天了。

我在 spring 启动应用程序中使用 HandlerInterceptorAdapter 来防止重复发布。

@Component
public class ViewInterceptor extends HandlerInterceptorAdapter {

    private final Logger logger = LoggerFactory.getLogger(ViewInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("...prehandle");
        return super.preHandle(request, response, handler);
    }

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