SpringBoot 请求TraceId设置

摘要:该实例主要是基于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;
    }
}
复制代码

image.png

猜你喜欢

转载自juejin.im/post/7017681207676665863