日志管理详解

2021-12-16 22:30:50 浏览数 (1)

支持的日志框架

每个公司所用的日志框架形形色色。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不会给系统带来额外的开销。这点也赞一下。

0 人点赞