2016-04-17 2 views
0

hinzufügen Ich habe gerade angefangen, auf Spring-Boot-Anwendung zu arbeiten. Ich möchte eine eindeutige UUID an jede API-Anfrage anhängen und sie an das Protokoll anhängen.Wie einzigartige UUID in jeder Anfrage in Spring basierte Java-Anwendung

I public class RequestContextListener implementiert ServletRequestListener geschrieben {

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(); 
} 

Unten ist mein logback-spring.xml Datei

<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}]"/> 

ändert Aber diese Arbeit ist für mich nicht. Muss ich irgendwo erwähnen, dass dies ausgeführt werden muss? Bitte helfen, ich habe schon einen Tag darauf verschwendet.

+0

Ich fehlte @ Komponent Annotation in meiner Klasse. –

Antwort

1

Ich benutze HandlerInterceptorAdapter in meiner Spring-Boot-App zur Vermeidung von doppelten Posts.

@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); 
    } 
} 
+0

Anstelle eines Interceptors würde ich wahrscheinlich einen ServletRequestListener erstellen, der vor allen Filtern ausgeführt wird. – varra