1 增加LogMdcFilter
package cn.xbz.common.filter;
import org.slf4j.MDC;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @title 为logback日志增加traceId
* @author Xingbz
* @createDate 2019-4-12
*/
@WebFilter(urlPatterns = "/*", filterName = "logMdcFilter")
public class LogMdcFilter implements Filter {
private static final String UNIQUE_ID = "traceId";
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
boolean bInsertMDC = insertMDC();
try {
chain.doFilter(request, response);
} finally {
if(bInsertMDC) {
MDC.remove(UNIQUE_ID);
}
}
}
@Override
public void destroy() {
}
private boolean insertMDC() {
UUID uuid = UUID.randomUUID();
String uniqueId = uuid.toString().replace("-", "");
MDC.put(UNIQUE_ID, uniqueId);
return true;
}
}
2配置logback日志格式
将 [%X[traceId]] 添加到日志输出格式中
...
<pattern>%d{HH:mm:ss} [%thread][%X{traceId}] %-5level %logger{36} - %msg%n</pattern>
...
3 . 异步任务补充
package cn.xbz.common.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
/**
* @title 为异步方法添加traceId
* @author Xingbz
* @createDate 2019-4-16
*/
@Aspect
@Component
public class LogMdcAspect {
private static final String UNIQUE_ID = "traceId";
@Pointcut("@annotation(org.springframework.scheduling.annotation.Async)")
public void logPointCut() {
}
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
MDC.put(UNIQUE_ID, UUID.randomUUID().toString().replace("-",""));
Object result = point.proceed();// 执行方法
MDC.remove(UNIQUE_ID);
return result;
}
}