Logback獲取SkyWalking的全局唯一標識 trace-id 記錄到日志中


為什么要獲取trace-id

通過上文Docker-Compose搭建單體SkyWalking我們搭建了SkyWalking服務,我們需要在日志中記錄下來每次請求的唯一標識(trace-id),這樣就可以在SkyWalking定位到有問題的trace-id,然后通過這個trace-id我們就可以通過日志系統去定位到相關的日志,從而發現並解決問題。

最開始和我說想法的老哥,想自己實現一套trace-id,以便滿足於如果想替換追蹤工具,不用改太多代碼。想法是很好的,但是經過查詢SkyWalking的GIT issue ,發現SW並沒有提供這種自定義trace-id的功能,

決定獲取SW生成的全局trace-id,這里主要是記錄下實現方式,這里使用了開源組件完成的效果

配置過程

在pom中添加依賴

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>6.2.0</version>
        </dependency>

這是一個skywalking的工具,通過這個工具可以得到trace-id

修改logback.xml中的Appender的Pattern

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%n</pattern>
            </layout>
        </encoder>

這里需要注意的是

  • Logback中的encoder本身是包含一個layout的,在有此Appender中是可以直接用encoder中的layout部分的,鑒於本人使用的是Kafka-appender這個插件,盡量通用就寫成這樣了。
  • encoder的class是LayoutWrappingEncoder,不是PatternLayoutEncoder!
  • 使用%tid 來占trace-id的位置,默認TID:N/A,當有請求調用時,會顯示trace-id
  • 這種方式支持探針與注解

測試

使用探針參數添加到LogDemo中測試,Demo地址: https://github.com/hellxz/LogDemo/tree/get-skywalking-trace-id ,注意分支

Java只需要在VM options中追加格式為

-javaagent:/path/to/path/skywalking-agent.jar 
-Dskywalking.agent.service_name=YOUR_APP_NAME 
-Dskywalking.collector.backend_service=OAP_SEVER_HOST:gRPC_PORT

舉例如下:

-javaagent:D:/skywalking-agent/skywalking-agent.jar 
-Dskywalking.agent.service_name=logDemo 
-Dskywalking.collector.backend_service=10.2.7.70:11800

啟動項目,如果沒有kafka輸出,可以注釋掉,只留下console輸出

我們可以看到默認的啟動打出的日志是這樣的

訪問測試接口http://localhost:8000/test/aaa,查看日志

引用文章 https://daocloud-labs.github.io/DMP-Public-Docs/skywalking/integration-log4j.html

感覺不美觀可以自行修改,本文內容以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM