支持的日志框架
每个公司所用的日志框架形形色色。TLog宣称支持了主流的三大日志框架:log4j,log4j2,logback
实际测试中,在这3个框架中,TLog也都能够正常打印出标签。只是在接入过程中,官方给出的接入方式有3种
5
测试下来,javaagent的方式对于有些项目的确不太稳定,有些复杂的项目会出现无效的情况。对于宣称最稳定的日志适配方式,测试了一下公司的项目,的确能顺利接入。
接入方式,按照文档一步步来就可以了。
支持的RPC框架
既然是跨微服务进行日志追踪,在实现方面也要对常用的RPC进行支持。TLog支持了Dubbo,SpringCloud,Dubbox三种常用的RPC,这点还是不错的。
实际测试中,在Spring cloud这块,TLog还支持了SpringCloud的Gateway。
在接入过程中,无论是哪种RPC框架,在springboot环境下TLog也能自动适配,引入一个就能自动装配。无需额外的配置。这点很方便。
但是在原生spring环境下(非springboot),还是需要xml的额外配置的,但是也相对简单,文档也有专门的说明。
业务标签
除了系统给予的标签外,我发现TLog另一大特点就是允许开发者自定义标签。接入也很简单,举个例子:
代码语言:txt复制@TLogAspect({"str","user.name","user.userDetail.company","user.dddd"})
代码语言:txt复制 public void test(String str, User user){
代码语言:txt复制 log.info("这是自定义表达标签");
代码语言:txt复制 log.info("这是业务日志1");
代码语言:txt复制 log.info("这是业务日志2");
代码语言:txt复制 log.info("这是业务日志3");
代码语言:txt复制 log.info("这是业务日志4");
代码语言:txt复制 log.info("这是业务日志5");
代码语言:txt复制 }
只要在方法上加一个标签,那么这个方法下面所有的日志,包括之后的N个层级,都会自动加上你定义的标签
这个功能在对日志的排版和查找上,又能增加很多个标记。这个很赞!
7
甚至于自定义标签还支持对信息的逻辑处理,可以自定义类去处理这些信息
代码语言:txt复制@TLogAspect(convert = CustomAspectLogConvert.class)
代码语言:txt复制public void demo(Person person){
代码语言:txt复制 log.info("自定义Convert示例");
代码语言:txt复制}
这个具体效果,大家可以去试试。总之一个标签搞定所有的自定义标签。
其他场景的支持
参数 &耗时打印支持:
引入了TLog之后,发现TLog还附带了无论在哪种框架之下每个方法的参数打印和耗时,默认为关闭,需要的只需要配置下就可以了:
代码语言:txt复制tlog.enableInvokeTimePrint=true
出来的效果如下:
6
异步线程 &线程池的支持
如果你的项目有异步线程,对于标签传递的连贯性,也是自动支持的,没有任何问题。
但是对于线程池场景,TLog并没有原生支持。但是提供了一个辅助类,需要少量的侵入代码。这点还有待改善。
MQ支持
同样的,TLog也考虑到了MQ场景标签的传递。这个也需要少量的侵入代码。如果你什么都不改,则在MQ场景下无法支持。
性能
对于性能,我对TLog进行了简单的测试,只在log4j2的环境下进行了测试,测试条件是同步打印出几w条日志,在原生环境下的耗时和加入TLog框架之后的耗时对比,每组分别测10次,取平均值
测试代码非常简单:
代码语言:txt复制StopWatch stopWatch = new StopWatch();
代码语言:txt复制stopWatch.start();
代码语言:txt复制for (int i = 0; i < 100; i ) {
代码语言:txt复制 log.info("test log {}", i 1);
代码语言:txt复制}
代码语言:txt复制stopWatch.stop();
代码语言:txt复制log.info("耗时:{}",stopWatch.getTotalTimeSeconds());
不加TLog
| 打印5w条日志(秒) | 打印10w条日志(秒)
---|---|---
第1次 | 6.496249974 | 15.595447718
第2次 | 6.185712521 | 14.295489162
第3次 | 6.116123718 | 13.559289437
第4次 | 6.205771261 | 12.782565374
第5次 | 6.727208117 | 12.884360048
第6次 | 5.908489157 | 14.604699842
第7次 | 6.153151066 | 13.700609245
第8次 | 6.603960836 | 13.048889457
第9次 | 6.139718196 | 12.584335736
第10次 | 6.365920588 | 12.85222910
平均 | 6.29 | 13.60
加入TLog
| 打印5w条日志(秒) | 打印10w条日志(秒)
---|---|---
第1次 | 5.997981416 | 12.878389572
第2次 | 6.154590093 | 14.268328625
第3次 | 6.228010581 | 12.385200456
第4次 | 6.452949788 | 15.542794904
第5次 | 6.156225995 | 12.350440713
第6次 | 6.121611887 | 12.543883453
第7次 | 6.18131273 | 12.192140225
第8次 | 6.238254682 | 12.159684042
第9次 | 6.403632588 | 12.308115127
第10次 | 5.954781153 | 12.321667925
平均 | 6.19 | 12.89
测试结果有点出乎意料,加了TLog后10次平均下来反而比不加要快第一点。但是我推测应该是测试环境和样本数量太少的问题,并不是说加反而比不加要快。只能说,如果进行100次,1000次测试。2者应该是差不多的。
从这个性能测试也侧面反映了,TLog不会给系统带来额外的开销。这点也赞一下。