1.背景:
以之前的公司為例论笔,由于公司系統(tǒng)的架構(gòu)為拆分為幾個模塊采郎,有基礎(chǔ)、網(wǎng)關(guān)狂魔、訂單蒜埋、庫存等,除了模塊與模塊之間的調(diào)用關(guān)系比較復(fù)雜最楷,模塊內(nèi)部的處理也比較多整份,不能很清晰的描述一條信息的生命周期待错,報錯時也無法快速的定位問題。
2.思路:
為每次請求分配一個流水號traceId烈评,在日志打印處加上這個traceId火俄,模塊調(diào)用時亦將traceId往下傳,直至整條消息處理完成讲冠,返回時清除traceId
3.做法:
- 模塊內(nèi)部日志串聯(lián):在網(wǎng)關(guān)接到訂單時生成唯一流水號traceId烛占,并將其放入threadLocal線程上下文里面,修改日志包在輸出時取出threadLocal的traceId沟启,一同輸出忆家,這樣模塊內(nèi)部的同個請求的日志便可以串聯(lián)起來;(也可以直接使用org.slf4j.MDC進(jìn)行設(shè)置)
- 模塊之間調(diào)用傳遞traceId:由于項(xiàng)目使用的是阿里的dubbo框架德迹,利用dubbo的RpcContext分別實(shí)現(xiàn)DubboConsumerFilter和DubboProviderFilter芽卿,前者負(fù)責(zé)將traceId放入RPC上下文,后者則取出traceId放入threadLocal;