輕量級分布式日志追蹤-Tlog快速入門

一、前言

  • 公司目前還沒有上 SkyWalking、Pinpoint等分布式追蹤系統(tǒng),所以先用個輕量級的吧
  • Tlog:只生成TraceId寫入日志文件,沒有 收集、存儲、查詢,所以 輕量
  • 以 spring-boot 2.3.12(非native) + log4j2 為例

二、快速入門

1. 選擇接入方式

2. 安裝

  • 建議把 tlog的依賴 放到 log4j2前面,可以少修改 log4j2配置文件
  • 原項目依賴 hutool 時,版本不一致可能包沖突
  • 全量依賴
        <dependency>
            <groupId>com.yomahub</groupId>
            <artifactId>tlog-all-spring-boot-starter</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.yomahub</groupId>
            <artifactId>tlog-feign-spring-boot-starter</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.yomahub</groupId>
            <artifactId>tlog-web-spring-boot-starter</artifactId>
            <version>1.5.0</version>
        </dependency>

3. Log4j2框架適配器

  • 如果 tlog的依賴 沒有放到 log4j2前面,需把pattern中的 m/msg/message 改成 tm/tmsg/tmessage
  • 日志pattern 沒有包含 %X 變量(MDC變量)時,可以不用增加 %TX{tl},會自動記錄
  • 日志pattern 包含 %X 變量時,需修改 pattern,增加 %TX{tl},記錄TraceId。否則不會記錄TraceId

4. 效果

啟動日志:Converter key 'message' is already mapped to 'class com.yomahub.tlog.core.enhance.log4j2.AspectLogLog4j2Converter'

2020-09-16 18:12:56,748 [WARN] [TLOG]重新生成traceId[7161457983341056]  >> com.yomahub.tlog.web.TLogWebInterceptor:39
2020-09-16 18:12:56,763 [INFO] <0><7161457983341056> logback-dubbox-consumer:invoke method sayHello,name=jack  >> com.yomahub.tlog.example.dubbox.controller.DemoController:22
2020-09-16 18:12:56,763 [INFO] <0><7161457983341056> 測試日志aaaa  >> com.yomahub.tlog.example.dubbox.controller.DemoController:23
2020-09-16 18:12:56,763 [INFO] <0><7161457983341056> 測試日志bbbb  >> com.yomahub.tlog.example.dubbox.controller.DemoController:24

三、配置

1. 日志標簽模板自定義

TLog默認只打出spanId和traceId,可修改 spring-boot 配置文件調整:

tlog.pattern=[$preApp][$preIp][$spanId][$traceId]

2. 自動打印調用參數(shù)和時間

默認不打印 參數(shù)和時間,可修改 spring-boot 配置文件調整:

tlog.enable-invoke-time-print=true

效果如下,方法開頭增加 一行記錄參數(shù)日志,末尾增加 耗時日志:

2020-12-01 19:20:07.768 [DubboServerHandler-127.0.0.1:30900-thread-2] INFO  c.y.tlog.dubbo.filter.TLogDubboInvokeTimeFilter - <0.1><7592057736843136> [TLOG]開始調用接口[DemoService]的方法[sayHello],參數(shù)為:["jack"]
2020-12-01 19:20:07.787 [DubboServerHandler-127.0.0.1:30900-thread-2] INFO  c.y.t.example.dubbo.service.impl.DemoServiceImpl - <0.1><7592057736843136> logback-dubbox-provider:invoke method sayHello,name=jack
2020-12-01 19:20:07.788 [Thread-14] INFO  c.y.tlog.example.dubbo.service.impl.AsynDomain - <0.1><7592057736843136> 這是異步方法哦
2020-12-01 19:20:07.788 [Thread-14] INFO  c.y.tlog.example.dubbo.service.impl.AsynDomain - <0.1><7592057736843136> 異步方法開始
2020-12-01 19:20:07.789 [Thread-14] INFO  c.y.tlog.example.dubbo.service.impl.AsynDomain - <0.1><7592057736843136> 異步方法結束
2020-12-01 19:20:07.795 [DubboServerHandler-127.0.0.1:30900-thread-2] INFO  c.y.tlog.dubbo.filter.TLogDubboInvokeTimeFilter - <0.1><7592057736843136> [TLOG]結束接口[DemoService]中方法[sayHello]的調用,耗時為:90毫秒

3. 錯誤處理

  • but cannot be delegated to target bean. Switch its visibility to package or protected.
    定時任務方法 不能是 private,需改為 package 或 protected

四、總結

  • Tlog 適合中小型企業(yè)以及想快速解決日志追蹤問題的公司項目使用
  • 想知道 為什么pattern 包含 %X 變量時,不增加 %TX{tl} 就不記錄 TraceId嗎,留言 我再寫一篇
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容