TLog:轻量级的分布式日志标记追踪神器
📖 简介
🍬 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架构图
✨TLog 最新版本
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>tlog-all-spring-boot-starter</artifactId>
<version>1.5.1</version>
</dependency>
⚒️TLog 接入方式
提示
springboot 项目自启动 | 非springboot 项目自启动 | springboot 项目外置容器 | 非springboot 项目外置容器 | |
javaagent 方式 | 适合 | 不适合 | 不适合 | 不适合 |
字节码 注入方式 | 适合 | 适合 | 不适合 | 不适合 |
日志框架 适配器方式 (最稳定) | 适合 | 适合 | 适合 | 适合 |
Javaagent接入方式
这种方式完全不侵入项目,利用Javaagent在启动时加入jar包,整个过程1分钟就能搞定。 这种方式要求你的项目必须是springboot项目。
-javaagent:/your_path/tlog-agent.jar
2、这里以dubbo+log4j为例,展示下最终日志效果
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
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:15
2020-09-16 18:12:56,854 [INFO] <0.1><7161457983341056> 测试日志cccc >> com.yomahub.tlog.example.dubbo.service.impl.DemoServiceImpl:16
2020-09-16 18:12:56,854 [INFO] <0.1><7161457983341056> 测试日志dddd >> com.yomahub.tlog.example.dubbo.service.impl.DemoServiceImpl:17
提示
其中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>
注意:
因为这里是用javassist实现,需要在jvm加载对应日志框架的类之前,进行字节码增强。所以这里用static块。但是此方法要注意以下几点:
对于Springboot应用而言,启动类中不能加入log定义,否则会不生效。
如果你的项目是非springboot,或者你是用tomcat/jboss/jetty等外置容器启动的(springboot的spring-boot-starter-web属于内置容器),则此方法无法使用
对于使用log4j2日志框架的应用来说,此方法如果出现不生效的情况:
请把log4j2配置文件的pattern
中的m/msg/message
改成tm/tmsg/tmessage
日志框架适配器方式
Log4j框架适配器参考:
https://tlog.yomahub.com/pages/a48c8e/
Log4j2框架适配器参考:
https://tlog.yomahub.com/pages/8d5538/
下面以接入Logback框架适配器为例介绍下具体操作:
1、同步日志
encoder
的实现类或者换掉layout
的实现类就可以了2、异步日志
替换掉appender
的实现类就可以了
👉 TLog中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开源社区精品项目推荐
项目名称 | 项目地址 | 项目介绍 |
---|---|---|
LiteFlow | https://gitee.com/dromara/liteFlow | 轻量,快速,可编排的组件式流程引擎 |
Sa-Token | https://gitee.com/dromara/sa-token | 史上功能最全的Java权限认证框架 |
SpringBoot_v2 | https://gitee.com/bdj/SpringBoot_v2 | 基于springboot的一款纯净脚手架 |
Jpom | https://gitee.com/dromara/Jpom | 简而轻的低侵入式在线构建部署、日常运维、项目监控软件。 |
您可能喜欢: