分布式日志排查太头疼?TLog 让你一眼看穿请求链路!

01 引言

你是否曾经历过这样的深夜?告警短信突然响起,线上订单莫名失败。你焦头烂额地登录一台台服务器,在成百上千行的日志文件里反复 grepawk,试图拼凑出一个完整请求的蛛丝马迹。

微服务之间环环相扣,一个请求穿越网关、订单、库存、支付……日志碎片散落在各处,就像一幅拼图被扔进了不同房间,排查过程宛如大海捞针。

这,正是分布式系统日志排查的常态——昂贵、低效且令人心力交瘁。但今天,这一切将成为过去。我们将为你介绍一款来自Dromara社区的神器——TLog。它不记录日志,却能让日志自己“说话”,为每一个请求装上全局“追踪器”,真正实现一眼看穿分布式请求链路,让问题定位变得前所未有的简单和清晰。

02 简介

TLog 是一个轻量级的分布式日志标记追踪框架,它并不重复造轮子去记录日志,而是专注于一件事:自动为你的每一次请求生成一个唯一的追踪ID(TraceId),并让这个ID在整个调用链路中无缝传递。

支持log4jlog4j2logback三大日志框架,支持dubbodubboxspringcloud三大RPC框架。

简单来说,TLog 的核心思想是:

  • 自动打标:在请求入口处(如HTTP请求、定时任务、消息队列消费者),TLog会自动生成一个全局唯一的TraceId
  • 无缝传递:无论你的服务之间通过何种方式调用(如FeignDubboOpenFeign等),TLog都能透明地将TraceId传递到下游服务。
  • 日志关联:在每个服务的日志输出中,TLog会自动将这个TraceId打印到日志内容中。

最终效果是,你只需要在日志平台(如ELKGraylogSplunk)上搜索这个TraceId,就能立刻拉取出这个请求流经所有服务全部日志,请求的完整生命周期一目了然。

Gitee地址:https://gitee.com/dromara/TLog

官网地址:https://tlog.yomahub.com/

03 最佳实践

3.1 接入方式选择

官方提供了三种接入方式:

  • Javaagent方式
  • 字节码注入方式
  • 日志框架适配方式

前两种的接入方式虽然简单,代码侵入性小。但是不支持MDC和异步日志。而且只支持springboot项目。官方推荐第三中接入方式:

3.2 Maven依赖引入

官方提供全量和按需引入的方式,如果你对项目不熟悉后果者项目框架使用混乱,可以选择全量引入的方式。

这里演示选择使用按需引入的方式:

<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>tlog-web-spring-boot-starter</artifactId>
    <version>1.5.2</version>
</dependency>

3.3 logback适配

就是将encoder的实现类ch.qos.logback.classic.encoder.PatternLayoutEncoder,换成com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder就好了。

3.4 测试案例

@Slf4j
@RestController
public class TlogTestController {

    @RequestMapping("/tlog")
    public void testTlog() {
        log.info(">>>>>>测试tlog");
        log.info(">>>>>>测试tlog 有没有加 traceId");
        log.info(">>>>>>测试tlog 有没有加 spanId");
    }
}

3.5 Tlog使用前后对比

使用前

使用后

其中第一个参数是spanId,第二个是traceId

**spanId**的生成规则,如图:

04 扩展功能

上面的案例已经完成了基本的接入,该框架还提供了扩展功能。

4.1 自动打印调用参数和时间

只需要一行配置:

# 不配默认为false
tlog.enable-invoke-time-print=true

效果

4.2 自定义TraceId生成器

TLog默认采用snowflake算法生成traceId,也可以自定义。只需要继承TLogIdGenerator类即可。

public class MytraceIdGenerator extends TLogIdGenerator {

    @Override
    public String generateTraceId() {
        return UUID.randomUUID().toString();
    }
}

然后在springboot的配置类里声明:

tlog.id-generator=com.simonking.boot.log.config.MytraceIdGenerator

结果就变成了UUID了:

05 小结

此外,Tlog还对常用的工具类做了支持,如:httpclienthutool-httpforest等。

在分布式系统复杂度日益增长的今天,可观测性不再是可选项,而是必需品。TLog以其简单、高效、非侵入的设计哲学,精准地解决了日志追踪这一核心痛点,为开发者提供了一把快速定位线上问题的“金钥匙”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值