实现原理
处理用户请求是以线程的方式进行处理的,可以在拦截器中,向MDC容器中写入可用于日志追踪的变量,在打印日志的时候取出相应的内容打印。
MDC:MDC ( Mapped Diagnostic Contexts ),它是一个线程安全的存放诊断日志的容器。他底层是通过使用InheritableThreadLocal变量来保证线程安全的。
实现方式:
1.首先在intercpet记录traceid、userid等可用于日志追中的变量
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
MDC.put("traceid",UUID.randomUUID().toString());
MDC.put("sessionid", UserSessionUtils.getSessionId());
MDC.put("userid", UserSessionUtils.getCurrentUserId());
return true;
}
2.在打印日志的时候从MDC中取出相应的变量,通过%X或者%mdc
<encoder>
<pattern>
[%level] [%thread] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%mdc{traceid}] [%mdc{userid}] [%mdc{sessionid}] [%logger{0}] [%msg]%n
</pattern>
</encoder>
网友评论