2025年springbootaop日志(springboot aop日志记录)

springbootaop日志(springboot aop日志记录)div id navCategory div 在进行开发时 会遇到以下问题 要记录请求参数 在每个接口中加打印和记录数据库日志操作 影响代码质量 也不利于修改 使用 AOP 记录日志 为解决这类问题 这里使用 AOP 进行日志记录 然后在执行时就会发现 前置通知没有打印内容 2019 12 25 22 08 27 875 INFO 4728

大家好,我是讯享网,很高兴认识大家。



 <div id="navCategory"></div> 

讯享网

在进行开发时,会遇到以下问题

要记录请求参数,在每个接口中加打印和记录数据库日志操作,影响代码质量,也不利于修改

使用AOP记录日志

为解决这类问题,这里使用AOP进行日志记录

然后在执行时就会发现,前置通知没有打印内容

2019-12-25 22:08:27.875 INFO 4728 --- [nio-9004-exec-1] com.zero.check.aspect.WebLogAspect : get Post Request Parameter err : Stream closed
2019-12-25 22:08:27.875 INFO 4728 --- [nio-9004-exec-1] com.zero.check.aspect.WebLogAspect : REQUEST:
2019-12-25 22:08:27.922 INFO 4728 --- [nio-9004-exec-1] c.z.c.controller.DataCheckController : Response : {"id":"1","roleId":2,"userList":[{"userId":"1","userName":"2"}]}
2019-12-25 22:08:27.937 INFO 4728 --- [nio-9004-exec-1] com.zero.check.aspect.WebLogAspect : RESPONSE: {"code":"ok","data":"Hello UserInfo(id=1, userList=[User(userId=1, userName=2)], roleId=2)","requestid":"bbac6bacb224f61a75af70ec"}

原因在ByteArrayInputStream的read方法中,其中有一个参数pos是读取的起点,在接口使用了@RequestBody获取参数,就会导致AOP中获取到的InputStream为空

以下代码用于测试读取InputStream

调用inputStream.read(new byte[6]);打印结果

7890

不调用inputStream.read(new byte[6]);打印结果

正常情况下,可以使用InputStream的reset()方法重置读取的起始点,但ServletInputStream不支持这个方法,所以ServletInputStream只能读取一次。

要多次读取ServletInputStream的内容,可以实现一个继承HttpServletRequestWrapper的方法RequestWrapper,并重写里面的getInputStream方法,这样就可以多次获取输入流,如果要对请求对象进行封装,可以在这里进行。

实现一个新的过滤器,在里面使用复写后的requestWrapper,就可以实现ServletInputStream的多次读取,如果要对请求对象进行鉴权,可以在这里进行。

POSTMAN

接口


讯享网

请求方式 post

请求参数

AOP打印日志

可以看到WebLogAspect成功打印了请求和返回结果

2019-12-25 23:48:45.047 INFO 17236 --- [nio-9004-exec-5] com.zero.check.aspect.WebLogAspect : REQUEST: {
"id": "1",
"roleId": 2,
"userList": [
{
"userId": "1",
"userName": "2"
}
]
}
2019-12-25 23:48:45.047 INFO 17236 --- [nio-9004-exec-5] com.zero.check.aspect.WebLogAspect : RESPONSE: {"code":"ok","data":"Hello UserInfo(id=1, userList=[User(userId=1, userName=2)], roleId=2)","requestid":"3a219b741a704f95a844faa10c3968f8"}

返回参数

JUNIT

DateCheckServiceApplicationTests

DataCheckControllerTest

AOP打印参数

2019-12-26 00:18:11.136 &nbsp;INFO 13016 — [ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; main] com.zero.check.aspect.WebLogAspect &nbsp; &nbsp; &nbsp; : REQUEST: {
&nbsp; &nbsp; &quot;id&quot;: &quot;1&quot;,
&nbsp; &nbsp; &quot;roleId&quot;: 2,
&nbsp; &nbsp; &quot;userList&quot;: [
&nbsp; &nbsp; &nbsp; &nbsp; {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;userId&quot;: &quot;1&quot;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;userName&quot;: &quot;2&quot;
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; ]
}
2019-12-26 00:18:11.542 &nbsp;INFO 13016 — [ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; main] com.zero.check.aspect.WebLogAspect &nbsp; &nbsp; &nbsp; : RESPONSE: {&quot;code&quot;:&quot;ok&quot;,&quot;data&quot;:&quot;Hello UserInfo(id=1, userList=[User(userId=1, userName=2)], roleId=2)&quot;,&quot;requestid&quot;:&quot;68c469da937ef39d3c6ceccf&quot;}

Process finished with exit code 0

代码Git地址

:A-mantis/SpringBootDataCheck.git

以上就是SpringBoot使用AOP实现日志记录功能详解的详细内容,更多关于SpringBoot AOP日志记录的资料请关注脚本之家其它相关文章!

小讯
上一篇 2025-05-09 16:20
下一篇 2025-05-03 12:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/137875.html