代码来咯,看代码多是一件美事呦,你他奶奶的为什么不看代码,给我看。
工作的时候,尤其是接口联调的时候,打印http请求记录是甩锅和解决问题的最好的方式。尤其是请求体里的内容。就是这个获取请求体的内容其实还有点门道,我就被坑过,你直接在拦截器里直接获取request里面的body,拦截器里能获取到,Controller里面就获取不到了。具体原因不深究,就是Body是用流传的,你读取了之后这个流就被消耗了,然后后面的代码再从request里面就读取不到了。
引入spring-boot-starter-actuator
引入之后,配置存储方式httpTraceRepository
,这个实例就是添加在内存中存储最近100次请求记录
最后在application.properties中加入
运行项目访问http://localhost:8080/actuator/httptrace
得到这样的JSON数据(已经格式化),
引入这个依赖的好处,就是几乎不需要写任何代码,引入,然后配置一下即可查看,缺点也有就是不能记录post请求的请求体,也无法记录返回值,持久化,目前我没有研究,但是我感觉可以。可以自行查阅资料研究。
使用springmvc自带的一个类
增加一个配置类
CommonsRequestLoggingFilter
可以点进去看一下,就是一个springboot提供得一个类。可以自己进行改造。接下来再配置一下logback就行。配置如下。看不懂或者不理解看这个logback配置详情
配置好打印的日志应该是这样
payload中得东西为请求体。一次请求会打印两条日志,Before request为过滤器前,After request为过滤器后的记录,这种方式其实已经挺好用了。但是还有个问题就是不能记录返回值,也有方法。
记录返回值
继承ResponseBodyAdvice
和使用RestControllerAdvice
注解来实现。
然后再配置logback
配置一下,输出的日志为
至此,http的请求记录就全部记录到了,payload中为请求体,请求体和返回内容。自己可以按需使用,开发过程中建议打印全部日志,方便调试,上线后,可以不打印。去掉也很方便,直接在logback配置中配置一下就可以了。
封面