跨系统传递 链路traceId(日志)

  • 微服务系统日志使用ELK采集.
  • 但单个请求会跨多个系统,mq等, 此时需要一个链路traceId, 能够一次查询还原出整一个请求的完整路径日志.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date %5level %6relative --- [%15thread] %-40logger{40} [trace:%X{traceId}] : %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.logs}/root.log</file>
        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] [trace:%X{traceId}] %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>root-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- Strictly speaking, the level attribute is not necessary since -->
    <!-- the level of the root level is set to DEBUG by default.       -->
    <root level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>
/**
 * trace链路常量
 */
public class TraceConstant {

    public static final String TRACE_ID = "traceId";

    public static final String SPAN_ID = "spanId";

}

/**
*统一请求注入traceId
**/
@Component
public class TraceApplicationInterceptor implements HandlerInterceptor {

    @Override
    @SuppressWarnings("all")
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String traceId = request.getHeader(TraceConstant.TRACE_ID);
        if (StringUtil.isBlank(traceId)) {
            traceId = UUID.randomUUID().toString();
        }
        MDC.put(TraceConstant.TRACE_ID, traceId);
        PageHelper.clearPage();
        return true;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值