log之给分布式服务添加traceId

#1.背景:
以之前的公司为例,由于公司系统的架构为拆分为几个模块,有基础、网关、订单、库存等,除了模块与模块之间的调用关系比较复杂,模块内部的处理也比较多,不能很清晰的描述一条信息的生命周期,报错时也无法快速的定位问题。
#2.思路:
为每次请求分配一个流水号traceId,在日志打印处加上这个traceId,模块调用时亦将traceId往下传,直至整条消息处理完成,返回时清除traceId
#3.做法:
- 模块内部日志串联:在网关接到订单时生成唯一流水号traceId,并将其放入threadLocal线程上下文里面,修改日志包在输出时取出threadLocal的traceId,一同输出,这样模块内部的同个请求的日志便可以串联起来;(也可以直接使用org.slf4j.MDC进行设置)
- 模块之间调用传递traceId:由于项目使用的是阿里的dubbo框架,利用dubbo的RpcContext分別实现DubboConsumerFilter和DubboProviderFilter,前者负责将traceId放入RPC上下文,后者则取出traceId放入threadLocal;

猜你喜欢

转载自blog.csdn.net/ni_xiang_shun_feng/article/details/114489770
今日推荐