场景:对所有数据交互请求增加日志记录。
通过简单检索,大致有如下方式:
1.filter
顺便试了一下interceptor不行,filter可以,但是要封装一层。
2.aop+注解
切点可以设为注解,也可以设为所有Controller。
好处是可以直接获取返回值,不需要过滤静态资源请求。
但是如果用注解方式,需要添加大量接口日志的话就比较麻烦。
3.spring-actuator
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html
优点是官方、功能全面,如健康监测、请求记录、统计、整合外部监控系统等。
缺点是仅记录请求,不能记录参数和返回值。
1.ContentCachingResponseWrapper/ContentCachingRequestWrapper
request/response body只能读一次,读取过body数据,请求就关闭了。
spring提供了两个类解决这个事:
ContentCachingResponseWrapper/ContentCachingRequestWrapper
ContentCachingResponseWrapper wrapper = new ContentCachingResponseWrapper(response);
chain.doFilter(requestWrapper, wrapper);
// do something
String responseData = new String(responseWrapper.getContentAsByteArray())
wrapper.copyBodyToResponse();
读完以后再将原数据拷贝回去。