在微服務裏,業務出現問題或者程序出的任何問題,都少不了查看日誌,通常咱們使用 ELK
相關的日誌收集工具,服務多的狀況下,業務問題也是有些難以排查,只能肯定大體時間定位相關日誌。log-trace-spring-boot-starter
解決多個服務調用日誌的問題,它能夠將一個完整的調用鏈給整合爲一個完整有序的日誌。git
支持組件:github
日誌輸出格式:spring
2019-11-14 14:22:07.796 INFO [log-trace-service-a-demo,ac8ffaaed5f343da,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-7] c.p.l.t.service.a.demo.TestController : controller test2 執行 ac8ffaaed5f343da
2019-11-14 14:23:15.569 INFO [log-trace-service-a-demo,04cf5392dc5c4881,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-9] c.p.l.t.service.a.demo.TestController : controller test2 執行 04cf5392dc5c4881
2019-11-14 14:24:44.183 INFO [log-trace-service-a-demo,86b5c555ce4f4451,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-1] c.p.l.t.service.a.demo.TestController : controller test2 執行 86b5c555ce4f4451複製代碼
咱們能夠經過 86b5c555ce4f4451
id 進行查詢鏈路上的全部日誌信息。微信
log-trace-service-a-demo
爲當前應用。log-trace-zuul-demo
爲上游應用。app
固然這些參數能夠基於業務定製的。框架
ps: 實際version版本請使用最新版最新版本: ![Maven Central](https://search.maven.org/search?q=g:com.purgeteam%20AND%20a:log-trace-spring-boot-starter)maven
點擊查看最新新版本svg
<dependency>
<groupId>com.purgeteam</groupId>
<artifactId>log-trace-spring-boot-starter</artifactId>
<version>0.1.0.RELEASE</version>
</dependency>複製代碼
ps: 請基於 SpirngBoot2.1.x
版本使用spring-boot
這裏以3個微服務來舉例子。微服務
log-trace-zuul-demo
充當網關功能 log-trace-service-a-demo
充當服務A log-trace-service-b-demo
充當服務B 調用鏈路爲:
log-trace-zuul-demo
-> log-trace-service-a-demo
TestController#test
-> log-trace-service-b-demo
TestController#test
訪問網關地址: http://127.0.0.1:8000/a/test
網關日誌以下:
2019-11-14 14:27:37.434 DEBUG [33b07a9c5f324375,this] 89996 --- [nio-8000-exec-1] c.p.l.t.s.i.zuul.TracePreZuulFilter : zuul traceid 33b07a9c5f324375複製代碼
網關轉發至服務A
服務A 日誌以下:
2019-11-14 14:27:37.476 INFO [log-trace-service-a-demo,33b07a9c5f324375,log-trace-zuul-demo,,] 88948 --- [nio-8081-exec-5] c.p.l.t.service.a.demo.TestController : controller test2 執行 33b07a9c5f324375複製代碼
服務A 調用 服務B
服務B 日誌以下:
2019-11-14 14:27:37.478 INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.t.servcie.b.demo.TestController : header traceId 33b07a9c5f324375
2019-11-14 14:27:37.478 INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.t.servcie.b.demo.TestController : controller test 執行 33b07a9c5f324375
2019-11-14 14:27:37.478 INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.trace.servcie.b.demo.TestService : test 方法執行 33b07a9c5f324375
2019-11-14 14:27:37.478 INFO [log-trace-service-b-demo,33b07a9c5f324375,log-trace-service-a-demo,,] 88952 --- [nio-8082-exec-3] c.p.l.trace.servcie.b.demo.TestService : test1 方法執行 33b07a9c5f324375複製代碼
這樣能夠在第三方日誌平臺按照一個id進行查詢了。
如 ELK
經過 33b07a9c5f324375
id 查詢出相關的全部鏈路調用。
目前支持以上參數:
X-B3-ParentName 上游服務名稱
X-B3-TraceId 爲一個請求分配的ID號,用來標識一條請求鏈路。複製代碼
經過 application.properties
進行配置。
spring.trace.log.format=X-B3-TraceId,X-B3-ParentName
`spring.trace.log.format` 配置參數順序將影響日誌輸出格式。
不配置將按照默認格式輸出。複製代碼
日誌輸出以下:
2019-11-14 14:27:37.434 DEBUG [33b07a9c5f324375,this] 89996 --- [nio-8000-exec-1] c.p.l.t.s.i.zuul.TracePreZuulFilter : zuul traceid 33b07a9c5f324375複製代碼
目前實現了日誌連貫的功能,後續將支持定製輸出 好比按照登錄人員id進行輸出,方便追蹤用戶行爲。框架方便後續支持 Dubbo
等。
示例代碼地址:log-trace-spring-boot
做者GitHub:
Purgeyao 歡迎關注qq交流羣:
812321371
微信交流羣:MercyYao
微信公衆號: