如果线上并发很大,如何在一堆杂乱无章的日志中找到调用链呢,可以加入trace_id进行跟踪,那么如何加呢,请听我细细道来。
js部分
$.ajaxSetup({
beforeSend: function(xhr){
xhr.setRequestHeader("TRACE_ID", getUUID());
}
});
function getUUID(){
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16).replace(/-/g,'');
});
}
java
写一个拦截器,拦截请求:
@Component
public class TraceIdInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
MDC.put("TRACE_ID", UUID.randomUUID().toString().replace("-",""));
return true;
}
}
写一个配置类,添加该拦截器:
@Configuration
public class Config implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TraceIdInterceptor()).addPathPatterns("/**");
}
}
在application.properties中设置log格式:
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} %X{TRACE_ID} [%thread] %-5level %logger- %msg%n