本文主要是介绍全链路追踪TLog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分布式追踪系统
SkyWalking,Pinpoint,基于OpenTracing规范,而且通常都是无侵入性的,并且有相对友好的管理界面来进行链路Span的查询。
TLog特性
- 通过对日志打标签完成轻量级微服务日志追踪
- 提供三种接入方式:javaagent完全无侵入接入,字节码一行代码接入,基于配置文件的接入
- 对业务代码无侵入式设计,使用简单,10分钟即可接入
- 支持常见的log4j,log4j2,logback三大日志框架,并提供自动检测,完成适配
- 支持dubbo,dubbox,springcloud三大RPC框架
- 支持Spring Cloud Gateway和Soul网关
- 适配HttpClient和Okhttp的http调用标签传递
- 支持三种任务框架,JDK的TimerTask,Quartz,XXL-JOB
- 支持日志标签的自定义模板的配置,提供多个系统级埋点标签的选择
- 支持异步线程的追踪,包括线程池,多级异步线程等场景
- 几乎无性能损耗,快速稳定,经过压测,损耗在0.01%
- 自启动
由main函数作为项目的启动入口 - 外置容器启动
指项目部署在类似tomcat容器中的,tomcat作为外容器,项目部署在webapp目录下的
javaagent本质也是字节码注入方式,只不过是完全无侵入项目的方式。
TLog接入方式对于特性的支持:
安装TLog
全量依赖
TLog对springboot和spring native提供了两种不同依赖,此种方式只需依赖一个包,必须的包会传递依赖进来
(1)springboot依赖
<dependency><groupId>com.yomahub</groupId><artifactId>tlog-all-spring-boot-starter</artifactId><version>1.3.1</version>
</dependency>
(2)spring native依赖
<dependency><groupId>com.yomahub</groupId><artifactId>tlog-all</artifactId><version>1.3.1</version>
</dependency>
按需依赖
<dependency><groupId>com.yomahub</groupId><artifactId>tlog-XXX-spring-boot-starter</artifactId><version>1.3.1</version>
</dependency>
javaagent接入方式
(1)在Java启动参数中加入:
-javaagent:/your_path/tlog-agent.jar
(2)下载地址:
https://gitee.com/dromara/TLog/releases/v1.3.1
字节码注入方式
这种方式适合springboot项目,需要项目依赖tlog-all-spring-boot-starter包, tlog提供springboot的自动装配功能。
只需要在你的启动类中加入一行代码,即可以自动进行探测你项目所使用的Log框架,并进行增强。
以下方法适用于log4j,logback,原则上log4j2连这一行都不需要,因为log4j2会插件架构设计,会自动读取TLog项目中log4j2的适配插件:
@SpringBootApplication
public class Runner {
static {AspectLogEnhance.enhance();}//进行日志增强,自动判断日志框架
public static void main(String[] args) {SpringApplication.run(Runner.class, args);}
}
因为这里是用javassist实现,需要在jvm加载对应日志框架的类之前,进行字节码增强。所以这里用static块。但是此方法要注意以下几点:
- 对于Springboot应用而言,启动类中不能加入log定义,否则会不生效
- 如果你的项目是非springboot,或者你是用tomcat/jboss/jetty等外置容器启动的(springboot的spring-boot-starter-web属于内置容器),则此方法无法使用,只能手动修改log配置文件
- 对于使用log4j2日志框架的应用来说,此方法如果出现不生效的情况,请把log4j2配置文件的pattern中的m/msg/message改成tm/tmsg/tmessage
示例:
2021-06-21 13:57:10.310 INFO 8988 --- [nio-8101-exec-1] c.fofund.boot.redis.cache.RedisService : <0><8734574520119040> 缓存key:[fofund-ipmc:login_token:null]
2021-06-21 13:57:10.367 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> login accountCode:[null],token:[null]
2021-06-21 13:57:10.367 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> ----------------request start----------------
2021-06-21 13:57:10.368 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> URL:http://localhost:8101/ipmc/account/add
2021-06-21 13:57:10.368 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> HTTP_METHOD :POST
2021-06-21 13:57:10.368 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> IP:0:0:0:0:0:0:0:1
2021-06-21 13:57:10.371 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> CLASS_METHOD:com.fofund.ipmc.controller.AccountController.addAccount
2021-06-21 13:57:10.372 INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect : <0><8734574520119040> ARGS:[AccountRequest(accountId=null, loginName=zhangwenlong99, password=LF8JQW1FywP+cuY+YEeMEBCOib7RcYYvMTLzbzCsVeSg4aj+pCSimmZSCeKX6bow5wOnsPOw64Phs30Pow38mIJsJmSc/J7Apv23htr3/JUiO6w9EpoLIGluU01NvplG/cpzIufxZNtMxkhBOzvCX1tV68NKg0LkYqa7Flh6nv0=, accountName=zhangwenlong05, employeeName=zhangwenlong05, phone=13003252799, email=zhangsan@fofund.com.cn, loginSwitch=1, oaFlag=null, roleList=[
这篇关于全链路追踪TLog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!