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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,464评论 19 139
  • 0 前言 在现行微服务的趋势下,一次调用的过程中涉及多个服务节点,产生的日志分布在不同的服务器上,虽说可以使用EL...
    七寸知架构阅读 10,863评论 8 53
  • 今天没什么重要的事要记。 小朋友来了不多几个,而且来的时间岔开,有的中来,有的下午来。 瓁的小说还没看完。《喧哗与...
    春风中沉醉阅读 3,517评论 0 1
  • 昨晚没听六级 在尽力解答 今晚不是很专心 又看了知乎托福帖子 两年前看过的 如今给了我信心 盗墓不是笔记 是人生啊
    良辰美LiangChen阅读 754评论 0 0