摘要:该实例主要是基于slf4j
的MDC进行实现tranceId
的上下文保存,当然也可以自己定义ThreadLocal
进行保存,方式一直,对于跨服务的调用也可以把tranceId
放在请求头中,接收方复用该tranceId
基于Filter
的实现
拦截所有的请求
@WebFilter(filterName = "traceIdFilter", urlPatterns = "/*")
@Component
public class TraceFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
MDC.put("tranceId", UUID.randomUUID().toString());
filterChain.doFilter(httpServletRequest,httpServletResponse);
}
}
复制代码
logback.xml
配置
<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} | %X{tranceId} | [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<logger name="org.springframework.web" level="INFO"/>
<logger name="com.huzhihui" level="INFO"/>
<!-- 指定项目可输出的最低级别日志 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
复制代码
定义控制器
@Slf4j
@RestController
public class CommonController {
@RequestMapping(value = "i18n")
public Object i18n(){
log.info("ttts");
log.info("bafgsdaf");
return message;
}
}
复制代码