spring boot 基础之使用AOP统一处理请求日志使用方法

xiaoxiao2021-02-28  97

面向切面(AOP)Aspect Oriented Programming是一种编程范式,与语言无关,是一种程序设计思想,它也是spring的两大核心之一。不了解的可以看下慕课网的视频讲解。以下是个人学习视频后整理出来的关键代码。 添加依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>

创建一个处理文件,在类上添加@Aspect注解,再用@Component将类加入到spring容器中去

package com.xu.demo_springboot_01.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.slf4j.Logger;//spring自带的日志框架 import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; @Aspect @Component//将这个类引入spring容器中去 public class HttpAspect { private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);//参数为当前使用的类名 @Pointcut("execution(public * com.xu.demo_springboot_01.controller.GirlController.*(..))")//要处理的方法,包名+类名+方法名 public void cut(){ } @Before("cut()")//在调用上面 @Pointcut标注的方法前执行以下方法 public void doBefore(JoinPoint joinPoint){//用于获取类方法 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //url logger.info("url ={}",request.getRequestURI()); //method logger.info("method={}",request.getMethod()); //ip logger.info("ip={}",request.getRemoteAddr()); //类方法 logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+'.'+ joinPoint.getSignature().getName());//获取类名及类方法 //参数 logger.info("args={}",joinPoint.getArgs()); } @After("cut()")//无论Controller中调用方法以何种方式结束,都会执行 public void doAfter(){ logger.info("----doAfter-----------"); } @AfterReturning(returning = "obj",pointcut = "cut()")//在调用上面 @Pointcut标注的方法后执行。用于获取返回值 public void doAfterReturning(Object obj){ logger.info("response={}",obj.toString()); } }

PS:导包要注意,导包要注意,导包要注意~

注: //记录日志变量的方法 logger.info("url ={}",request.getRequestURI());//逗号后面跟要记录的变量 //记录日志常量 logger.info("url");

源码地址:https://github.com/lsuXu/demo_springboot_01/tree/web_demo,后续会随着学习不断增加其他代码

转载请注明原文地址: https://www.6miu.com/read-53954.html

最新回复(0)