查看原文
其他

TLog:轻量级的分布式日志标记追踪神器

小胡 爱编程爱技术 2023-12-13

📖 简介

TLog是一个轻量级的分布式日志标记追踪神器,10分钟即可接入,自动对日志打标签完成微服务的链路追踪。支持log4jlog4j2logback三大日志框架,支持自动检测适配,支持dubbodubboxspringcloud三大RPC框架

🍬 TLog 特性

  • 通过对日志打标签完成轻量级微服务日志追踪
  • 提供三种接入方式:javaagent完全无侵入接入,字节码一行代码接入,基于配置文件的接入
  • 对业务代码无侵入式设计,使用简单,10分钟即可接入
  • 支持常见的log4j,log4j2,logback三大日志框架,并提供自动检测,完成适配
  • 支持dubbo,dubbox,springcloud三大RPC框架
  • 支持Spring Cloud Gateway和Soul网关
  • 适配HttpClient和Okhttp的http调用标签传递
  • 支持三种任务框架,JDK的TimerTask,Quartz,XXL-JOB
  • 支持日志标签的自定义模板的配置,提供多个系统级埋点标签的选择
  • 支持异步线程的追踪,包括线程池,多级异步线程等场景
  • 几乎无性能损耗,快速稳定,经过压测,损耗在0.01%

Gitee荣誉证书

TLog入选2020年GVP

🦋 轻量,强大

TLog通过对日志打标签完成企业级微服务的日志追踪。它不收集日志,使用简单, 产生全局唯一追踪码。除了追踪码,TLog还支持SpanId和上下游服务信息 标签的追加。你还可以自定义方法级别的标签,让日志的定位轻而易举。

10分钟接入

为用户使用方便而设计,提供完全零侵入式接入方式,自动探测项目中使用的RPC框架和日志框架, 进行字节码的注入完成系统级日志标签的追加。你的项目用不到10分钟即可接入TLog。

🧩 适配广泛

TLog适配了市面上主流的RPC框架:dubbo,dubbox,spring cloud。同时适配了三大主流Log框架:log4j,logback,log4j2。支持多种网关,定时任务框架以及http框架。

🧱TLog架构图

TLog 最新版本

<dependency> <groupId>com.yomahub</groupId> <artifactId>tlog-all-spring-boot-starter</artifactId> <version>1.5.1</version></dependency>

⚒️TLog 接入方式

提示

TLog提供三大接入方式,兼容各种各样的项目环境,请对照以下表,选择适合你项目的接入方式

springboot

项目自启动

springboot

项目自启动

springboot

项目外置容器

springboot

项目外置容器

javaagent

方式

适合
不适合
不适合不适合

字节码

注入方式

适合适合不适合不适合

日志框架

适配器方式

(最稳定)

适合适合适合适合
  • Javaagent接入方式

这种方式完全不侵入项目,利用Javaagent在启动时加入jar包,整个过程1分钟就能搞定。 这种方式要求你的项目必须是springboot项目。

1、在你的java启动参数中加入:
-javaagent:/your_path/tlog-agent.jar
只需要这一步,就可以把springboot项目快速接入了

2、这里以dubbo+log4j为例,展示下最终日志效果

Consumer代码
Consumer日志打印:
2020-09-16 18:12:56,748 [WARN] [TLOG]重新生成traceId[7161457983341056] >> com.yomahub.tlog.web.TLogWebInterceptor:392020-09-16 18:12:56,763 [INFO] <0><7161457983341056> logback-dubbox-consumer:invoke method sayHello,name=jack >> com.yomahub.tlog.example.dubbox.controller.DemoController:222020-09-16 18:12:56,763 [INFO] <0><7161457983341056> 测试日志aaaa >> com.yomahub.tlog.example.dubbox.controller.DemoController:232020-09-16 18:12:56,763 [INFO] <0><7161457983341056> 测试日志bbbb >> com.yomahub.tlog.example.dubbox.controller.DemoController:24
Provider代码:
Provider日志打印:
2020-09-16 18:12:56,854 [INFO] <0.1><7161457983341056> logback-dubbox-provider:invoke method sayHello,name=jack >> com.yomahub.tlog.example.dubbo.service.impl.DemoServiceImpl:152020-09-16 18:12:56,854 [INFO] <0.1><7161457983341056> 测试日志cccc >> com.yomahub.tlog.example.dubbo.service.impl.DemoServiceImpl:162020-09-16 18:12:56,854 [INFO] <0.1><7161457983341056> 测试日志dddd >> com.yomahub.tlog.example.dubbo.service.impl.DemoServiceImpl:17
可以看到,经过简单接入后,各个微服务之间每个请求有一个全局唯一的traceId贯穿其中,对所有的日志输出都能生效,这下定位某个请求的日志链就变得轻松了。

提示

其中traceId前面的0,0.1是spanId。


  • 字节码注入方式

这种方式适合springboot项目,需要项目依赖tlog-all-spring-boot-starter包, tlog提供springboot的自动装配功能。只需要在你的启动类中加入一行代码,即可以自动进行探测你项目所使用的Log框架,并进行增强。

<dependency> <groupId>com.yomahub</groupId> <artifactId>tlog-all-spring-boot-starter</artifactId> <version>1.5.1</version></dependency>

方法对3大日志框架的异步日志形式也支持,请放心使用!

注意:

因为这里是用javassist实现,需要在jvm加载对应日志框架的类之前,进行字节码增强。所以这里用static块。但是此方法要注意以下几点:

  • 对于Springboot应用而言,启动类中不能加入log定义,否则会不生效。

  • 如果你的项目是非springboot,或者你是用tomcat/jboss/jetty等外置容器启动的(springboot的spring-boot-starter-web属于内置容器),则此方法无法使用

  • 对于使用log4j2日志框架的应用来说,此方法如果出现不生效的情况:

 请把log4j2配置文件的pattern中的m/msg/message改成tm/tmsg/tmessage

  • 日志框架适配器方式
TLog提供了每一种日志框架适配的方式,需要你去修改日志的配置文件,替换相应的类 ,配置方式也很简单,这种方式支持了全特性,为官方推荐方式!

Log4j框架适配器参考:

https://tlog.yomahub.com/pages/a48c8e/

Log4j2框架适配器参考:

https://tlog.yomahub.com/pages/8d5538/

下面以接入Logback框架适配器为例介绍下具体操作:

1、同步日志

    换掉encoder的实现类或者换掉layout的实现类就可以了

2、异步日志

替换掉appender的实现类就可以了

👉 TLog中SpanId的生成规则介绍

TLog默认的标签打印模板是<$spanId><$traceId>
TLog 中的 SpanId 代表本次调用在整个调用链路树中的位置,假设一个 Web 系统 A 接收了一次用户请求,那么在这个系统的日志中,记录下的 SpanId 是 0,代表是整个调用的根节点,如果 A 系统处理这次请求,需要通过 RPC 依次调用 B,C,D 三个系统,那么在 A 系统的客户端日志中,SpanId 分别是 0.1,0.2 和 0.3,在 B,C,D 三个系统的服务端日志中,SpanId 也分别是 0.1,0.2 和 0.3;如果 C 系统在处理请求的时候又调用了 E,F 两个系统,那么 C 系统中对应的客户端日志是 0.2.1 和 0.2.2,E,F 两个系统对应的服务端日志也是 0.2.1 和 0.2.2。根据上面的描述,我们可以知道,如果把一次调用中所有的 SpanId 收集起来,可以组成一棵完整的链路树。

我们假设一次分布式调用中产生的 TraceId 是 0a1234(实际不会这么短),那么根据上文 SpanId 的产生过程,有下图:

🎈总结

随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候。因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。非常适合中小型企业以及想快速解决日志追踪问题的公司项目使用。

附上官网链接:

官网:

https://tlog.yomahub.com/

项目地址:

https://gitee.com/dromara/TLog

开发手册:

https://tlog.yomahub.com/pages/5b7bd2/

最新 tlog-agent.jar 下载地址:

https://gitee.com/dromara/TLog/releases/v1.5.0

👨‍🎓聊一聊

  • 公众号推送改版,务必点击【爱编程爱技术】右上角【设为星标🌟】,这样才不会错过推送。

  • 如果侵犯了您的权益,请点击菜单栏联系公众号,一经核实,我们会在最短的时间内删除!感谢理解!

  • 该系列软件经本人亲测可用!

🔮Dromara开源社区精品项目推荐

项目名称项目地址项目介绍
LiteFlowhttps://gitee.com/dromara/liteFlow轻量,快速,可编排的组件式流程引擎
Sa-Tokenhttps://gitee.com/dromara/sa-token史上功能最全的Java权限认证框架
SpringBoot_v2https://gitee.com/bdj/SpringBoot_v2基于springboot的一款纯净脚手架
Jpomhttps://gitee.com/dromara/Jpom简而轻的低侵入式在线构建部署、日常运维、项目监控软件。

您可能喜欢:

Java性能监控神器MyPerf4J,开源免费!
手把手教你搭建MyPer4J、Grafana、InfluxDB实时监控系统
Spring RestTemplate上传文件
ConcurrentHashMap线程安全吗
十款好用的开源软件,功能强悍,完全免费!
总结过去10年的程序员生涯,给程序员一些总结性忠告

Nginx请求头丢失的问题

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存