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

时间:2016-04-17 13:11:35

标签: java spring log4j

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

我写过     公共类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}]"/>

但这不适合我。 我是否必须提到需要执行的任何地方? 请帮助,我已经浪费了一天。

1 个答案:

答案 0 :(得分:1)

我在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);
    }
}