最近在做TLog 1.2.5版本的迭代,许多小伙伴之前也表示说很想参与开源项目的贡献。为了让项目更好更快速的迭代新特性以及本着发扬开源精神互相学习交流,很有幸招募到了很多小伙伴与我一起前行。
为了方便大家理解TLog项目的核心原理和架构,便有了此篇内容。此篇内容偏向TLog技术设计和核心原理,同时也涵盖着做一个开源框架所需要考虑的问题和技术要点。
我一直相信,好的技术内容应提领关键点,引导大家该去如何读懂源码。而不是全篇的贴代码。所以此篇也不是源码解析,而是提炼关键点,让大家如何的更好去理解。
因为阅读者在某些点上可能会有知识盲区,为了讲了细致,在某些点上我尽可能附加了延伸阅读。知道相关知识点的同学,可以直接跳过。
还有,如果你是第一次阅读到此篇内容,不知道TLog是什么项目,则可以移步Gitee的托管仓库以及项目主页去查看项目特性:
gitee托管仓库:https://gitee.com/dromara/TLog
github托管仓库: https://github.com/dromara/TLog
项目主页: https://yomahub.com/tlog/
你也可以看之前发布的一篇介绍TLog文章
https://mp.weixin.qq.com/s/-lalQBIUqxU2RW4RWHHvNw
模块了解一款开源框架,首先从模块开始了解,TLog定位是一款轻量级日志追踪框架,它由10个模块组成
首先TLog既然是一款日志框架,日志增强就是它的核心,得适配主流的日志框架(log4j / log4j2 /logback),这些最主要的逻辑和最核心的功能实现都在tlog-core模块中(以后可能还会单独拆出3个日志框架的单独模块)。
其次,TLog能够进行日志追踪,自然要适配微服务架构,支持RPC框架/协议(dubbo / dubbox / spring cloud feign / http)。由于每种RPC框架有自己的扩展点,自然不可能抽象写出统一的处理逻辑。所以就有了以下模块:
tlog-dubbo为对接apache dubbo的适配模块
tlog-dubbox为对接早期的当当的dubbox开源版本,因为有的公司还在用
tlog-feign 为对接spring cloud feign的适配模块
tlog-webroot为对接最普通的http调用适配模块
考虑到用spring cloud的很多公司都会用spring全家桶的spring cloud gateway,所以就有了适配spring cloud gateway的适配模块tlog-gateway
在spring支持方面,tlog支持了传统spring的xml配置结构,也支持了springboot的自动装配。由于spring是springboot的子集,所以必定有2个模块,所以就有了tlog-all和tlog-all-springboot-starter。之所以要加上all字样,因为这2个包也是开发者引用的门面包,这2个提供单独的依赖地址,会把所需要其他的tlog包一起依赖带入。这样就不用一个个去声明依赖了。
TLog提供了基于javaagent的无依赖使用方式,所以就有了tlog-agent模块。在打包时,会单独打成一个jar包。
其他tlog模块所公共使用的一些VO,枚举,util类则抽出来形成一个单独的模块,所以就有了tlog-common。
模块之间的依赖关系图如下:
启动装载TLog大约有80%的工作都是启动时完成的,所以第一步就要弄清楚TLog随着项目启动时干了些什么。
由于springboot有自动装配功能,所以只需要弄清楚tlog-all-springboot-starter自动装配了什么,就可以了解非springboot项目那些手动配置xml的意义了。
不清楚springboot自动装配功能的同学,可以先去了解下这块的知识,我觉得这篇文章讲的比较透彻,可以延伸阅读下:
https://zhuanlan.zhihu.com/p/95217578
TLog在springboot环境下所有自动装配的配置类,都在spring.factories中体现:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.yomahub.tlog.springboot.TLogPropertyConfiguration,\ com.yomahub.tlog.springboot.TLogWebAutoConfiguration,\ com.yomahub.tlog.springboot.TLogFeignAutoConfiguration,\ com.yomahub.tlog.springboot.TLogAspectAutoConfiguration,\ com.yomahub.tlog.springboot.TLogCommonAutoConfiguration,\ com.yomahub.tlog.springboot.TLogGatewayAutoConfigurationTLogPropertyConfiguration主要用来自动装配的是TLog配置初始化器,最终注入的是TLogPropertyInit,在传统spring环境下,也只需要单独配置TLogPropertyInit的xml就可以了,所以两种spring环境形成最终的统一。
TLogWebAutoConfiguration主要用来自动装配http协议的拦截器。
TLogFeignAutoConfiguration主要用来自动装配spring cloud feign环境下的拦截过滤器。
TLogAspectAutoConfiguration主要用来自动装配自定义标签的切面,spring会自动为切中的类生成动态代理注入上下文。
TLogCommonAutoConfiguration主要用来自动装配基于spring上下文的工具类。在很多不在spring容器管理中的bean想获取spring上下文中的bean时,都会用到这个工具类。
TLogGatewayAutoConfiguration主要用来自动装配spring cloud gateway环境下的拦截过滤器。