如何优雅的在 SpringBoot 中打印 Request&Response 日志

2020-09-22 11:53:28 +08:00
 springmarker

本来想写个 springboot-starter 来做 Request&Response 日志打印的,但是发现逛了一圈谷歌,发现基本都是用拦截器做的。

使用拦截器做本身没什么问题,但是 HttpServletRequest 读取过一次后,body 就不能再读取了,解决办法就是在 Filter 中自己提前包装一个可重复读的 Request,但是觉得这样做有点麻烦而且不那么优雅。

请教一下有什么优雅的办法在 SpringBoot 中打印 Request&Response 日志吗?

7517 次点击
所在节点    Java
27 条回复
tiankongzhe
2020-09-23 14:22:48 +08:00
哥,springboot 都有这个功能的提供的,只需要配置的开关打开就好了
spring.http.log-request-details=true
springmarker
2020-09-23 14:47:18 +08:00
@tiankongzhe #21 这个已经过时了,而且在 2.3.4 上没有生效
tiankongzhe
2020-09-23 14:51:00 +08:00
spring boot 2.1
logging.level.org.springframework.web=DEBUG
spring.http.log-request-details=true

spring boot 2.2
logging.level.org.springframework.web=DEBUG
spring.mvc.log-request-details=true

配置上就好了,请求日志就有了
tiankongzhe
2020-09-23 14:52:22 +08:00
2.3 的官网找下吧,应该有这个配置的,之前的版本我是在官网 doc 上看到的
springmarker
2020-09-23 15:02:28 +08:00
@tiankongzhe #23
这个是没有 Body 的,早就试过了。
简略写法:logging.level.web=debug
tiankongzhe
2020-09-23 15:04:29 +08:00
@springmarker 尝试用 javassist 吧,这到请求的总入口,加入 agent,这样比 filter 和 aop 都要简单,性能也高
fanyiaa
2020-09-27 12:00:27 +08:00
参考这个,把其中加密解密部分去掉就行了
https://gitee.com/ishuibo/rsa-encrypt-body-spring-boot

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/709352

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX