当前位置:
首页
文章
后端
详情

轻量级分布式日志追踪-Tlog快速入门

一、前言

  • 公司目前还没有上 SkyWalking、Pinpoint等分布式追踪系统,所以先用个轻量级的吧
  • Tlog:只生成TraceId写入日志文件,没有 收集、存储、查询,所以 轻量
  • 以 spring-boot 2.3.12(非native) + log4j2 为例

二、快速入门

1. 选择接入方式

  • 日志框架适配器方式 最稳定,优先选择
  • 另有 Javaagent方式、字节码注入方式

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. 自动打印调用参数和时间

默认不打印 参数和时间,可修改 spring-boot 配置文件调整:

tlog.enable-invoke-time-print=true

效果如下,方法开头增加 一行记录参数日志,末尾增加 耗时日志:

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],参数为:["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 适合中小型企业以及想快速解决日志追踪问题的公司项目使用
  • 想知道 为什么pattern 包含 %X 变量时,不增加 %TX{tl} 就不记录 TraceId吗,留言 我再写一篇

本文首先发布于 https://www.890808.xyz/ ,其他平台需要审核更新慢一些。

轻量级分布式日志追踪-Tlog快速入门

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

同类热门文章

深入了解C++中的new操作符:使用具体实例学习

C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。


深入了解C++中的new操作符:使用具体实例学习

怎么用Java反射获取包下所有类? 详细代码实例操作

Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。


怎么用Java反射获取包下所有类? 详细代码实例操作

员工线上学习考试系统

有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

员工线上学习考试系统

了解Java中的volati关键字的作用 以及具体使用方法

本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。


了解Java中的volati关键字的作用 以及具体使用方法

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

Java Map 所有的值转为String类型