给网友们整理相关的编程文章,网友姚寻菡根据主题投稿了本篇教程内容,涉及到springboot、aop、web请求日志、spring、aop实现日志记录、Springboot日志、SpringBoot AOP统一处理Web请求日志相关内容,已被696网友关注,下面的电子资料对本篇知识点有更加详尽的解释。
SpringBoot AOP统一处理Web请求日志
SpringBoot AOP统一处理Web请求日志
引入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
- 新建过滤器 WebLogAspect.java
- 使用 @Aspect 注解修饰:说明当前类 是一个切面类。
- 使用 @Component注解修饰:标记 切面类 为组件,这样 IOC 容器 会为其实例化和管理(< bean>)
- 定义切面方法:webLog() 方法名随意
- 使用环绕通知 @Around(“execution(public * com.daxiong.mall.Controller..(…))”) 注解修饰指定 切面范围。
@Around("execution(public * com.daxiong.mall.controller.*.*(..))") public Object webLog(ProceedingJoinPoint pjp) {}
记录请求 URL:
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); log.info("URL : " + request.getRequestURL().toString());
请求类型:
log.info("HTTP_METHOD : " + request.getMethod());
IP 地址:
- 若是本地 localhost,则会返回 ipv6 0:0:0:0:0:0:0:1
log.info("IP : " + request.getRemoteAddr());
记录请求的 类以及方法:
- 使用 环绕通知的 ProceedingJoinPoint 参数。
log.info("CLASS_METHOD : " + pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName());
记录请求参数:
log.info("ARGS : " + Arrays.toString(pjp.getArgs()));
执行方法,处理请求
Object res = pjp.proceed(pjp.getArgs());
记录响应结果 使用 jackson 将帝乡转换为 json 格式。
log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));
全部:
/** * 打印请求和响应信息 */ @Aspect @Component public class WebLogAspect { private final Logger log = LoggerFactory.getLogger(WebLogAspect.class); @Around("execution(public * com.daxiong.mall.controller.*.*(..))") public Object webLog(ProceedingJoinPoint pjp) throws Throwable { log.info("========================新的请求========================"); // 收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); log.info("URL : " + request.getRequestURL().toString()); log.info("HTTP_METHOD : " + request.getMethod()); // 若是 localhost,则会返回 0:0:0:0:0:0:0:1 log.info("IP : " + request.getRemoteAddr()); log.info("CLASS_METHOD : " + pjp.getSignature().getDeclaringTypeName() + "." + pjp.getSignature().getName()); log.info("ARGS : " + Arrays.toString(pjp.getArgs())); // 执行方法,处理请求 Object res = pjp.proceed(pjp.getArgs()); // 记录响应 log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res)); return res; } }
总结
到此这篇关于SpringBoot AOP统一处理Web请求日志的文章就介绍到这了,更多相关SpringBoot AOP统一处理Web请求日志内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!