通过AOP统一打印请求链路日志,排错效率飞升

通过AOP统一打印请求链路日志,排错效率飞升

首页卡牌对战代号飞升更新时间:2024-05-09

高并发&微服务&性能调优实战案例100讲:19、通过aop统一打印请求链路日志,排错效率飞升。

大家好,我是路人。今天给大家分享是我的高并发实战案例100讲的第十六节,通过AOP统一打印请求链路日志,排错效率飞升。看过本文并实施之后,解决问题的效率将大幅提升。案例代码和文档同样会放在我的高并发实战案例100讲中,有需要的小伙伴们可以点击左下角的小黄车下单之后获取。

大家先思考一个问题,当一个接口报错的时候如何能够快速定位问题?如果能够满足下面这些条件就可以快速定位错误。

·第一、能够快速找到接口的详细交通日志。

·第二、日志中最好知道出错的是哪个接口的哪个方法,也就是处理当前请求是由哪个康特尔的哪个方法处理的。

·第三、日志中最好有接口的入餐、反餐。

·第四、日志中含有异常的详细对战信息,记哪行代码报的错。

有了这些信息之后,解决问题的效率将大幅提升。本文就是帮你解决这些问题的。下面先带大家看一下效果,看完效果之后再看代码。

·先启动一下这个案例,案例代码在这里,在这个模块中是一个使命部的应用。启动一下,在这里启动一下,启动成功。

·先把日志清理一下,然后访问一个正常接口。把地址复制出来在浏览器中访问一下,看下效果。在这里面访问一下接口,看下接口的输出。接口里面会输出有一个这样的字叫川字id,拿到的川字id可以去找到请求完整的日志。

·当回到空子台,拿刚才那个传奇id去找一下,在这边找一下,可以看到刚才请求的完整的日志。可以看到请求完整的日志,这边是请求开始了,请求了一个地址。这是处理请求是由哪个康特哪个方法处理这个请,这是请求的参数。

·先看下这个接口,可以看到请求是用这个方法处理的,只有三个参数,这边会把方法的参数打出来,打印出来,这边随后会打印出方法的返回值,记录了接口的耗时。

·再回到文档,再来看一个异常的案例。在浏览器中访问下这个地址,这边访问一下这个家伙,看一下这个家伙报错了,它报用户名无效。这里返回钥匙块是表示请求处理有异常。

·拿着川式id去后端找日志,同样的在后端通过川式id可以搜索到完整的日志。可以看到调用的是登录的接口,是有这个方法处理的。

·然后它入餐是张山,可以看到爆了个异常,是这个地方爆了异常,可以进去看一下,二十九行这个地方爆了异常,看一下会掉,这个结果教你们会判断这个类目是不是路人。如果不是路人之后会抛一个异常,也就用户名五,这里就可以通过前端给传承id也可以调,可以找到完整的错误设置,并且。可以快速定位老师哪一方代码报错了,这样就可以快速解决问题,也就是按钮代码中就是把请求的完整信息都给打印出来了,这样就可以快速定位错误。

·来看一下原码,原码主要涉及到三个类。

→第一个是这个,这类主要是负责打印接口的详细知识。看一下这个类的原码,这类也是一个aop,这边有一个环绕通知,环绕通知会拦截ctrl 的所有的方法,这边可以会打印出处理请求是由哪个内容、哪个方法去进行处理的。

这段代码会获取目标方法所有的参数,然后把它丢到卖铺中来,卖铺就是参数的名称,value就是参数的值,这个地方会把卖铺给打出来反映出来。这里可以看到一些参数可能不需要打印,比如这些参数是敏感信息,这边就不需要打印,这个方法中会经过处理,这个方法中会判断参数上面如果加了注解就不会打印。

可以看一下案例,比如接口是一个密码,密码不需要打印,前面加一个注解就可以了,自动就不会打印出参数。

·再回到代码,再看一下这边会打印出返回值,返回值有一些也是敏感记忆,有可能敏感记忆也不会打印,这边会判断一下返回值,这个方法的返回值是否需要打印。

·这边看一下,如果方法上面加了注解,返回值就不会打印,这是这个类的原码。

·再看另外一个类的原码,传字filter,传字filter主要是生成一个传字id的,日字中会输出传字id,可以看一下字字中输出传字id就是传字filter生成的。

·去看一下原码,传字filter会拦截所有的请求,请求进来之后会生成一个唯一的id,调用这个方法去看一下,方法中会用到mdc,mdc是老歌百合提供的扩展接口,然后厂里面放入了一个k y 六的数据,k就是传世id,y 六就是刚才传进来唯一的传世id,放进来之后老歌百合中就可以取了。

·放进来值怎么取了?去老歌百合中配置文件中看一下老外迈克的输出日志的格式,主要看一下这个地方,这个地方就可以取到刚才通过mdc方法放进去的传字id,日子中就会输出传字id。

·再看下第三个类,主要是让传字id统一丢到响应结果中,大家可以看一下这个就是响应结果中都会返回,传字id就是由这个类丢进去了,看一下这个类的原码也是aop,会拦截。并且会拦截全局异常处理的方法。

这边有个环绕通知会判断一下方法的返回值是不是z2的类型,因为这边所有接口的房子都是瑞尔特类型,瑞尔特里面有一个质量传世id,这边发现返回的结果是瑞尔特类型的时候会拿到传世id,然后丢到瑞尔特资料中,前面就可以看到传世id了。

当接口报错的时候,如果前端能提供传世id,就可以在日志文院中找到其完整的资质,就可以快速定位问题,进而去解决问题,是不是感觉非常不错?原码同样是放在高冰化十三一百讲的模块中,有兴趣可以点击左下角小黄车了解一下。

下节主要会给大家带来一个实战,就是大批量任务处理常见的方案,这边会模拟余额宝发放收益的场景,带大家了解一下大批量任务处理是怎么处理的。

我的高并发实战二零一八奖金已经更新到十九节了,目前整个客人价格是五十九块钱,有兴趣的朋友可以了解一下后面可能要涨价了,这个课程哪个部分大纲大家也可以看一下,大纲还在连载中,谢谢大家。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved