美文网首页
springBoot采用Aop统一处理请求日志使用方法

springBoot采用Aop统一处理请求日志使用方法

作者: 蓝胖子的编程梦 | 来源:发表于2018-03-17 12:18 被阅读0次

1,在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2,创建一个处理文件,在类上添加@Aspect注解,再用@Component将类加入到spring容器中去(以下文件变更导入的包)
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());
}

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

相关文章

  • SpringBoot-AOP

    SpringBoot-AOP 使用AOP统一处理请求日志 1.AOP的概念 AOP:AOP是一种编程范式,与语言无...

  • 2020-02-01

    26,Spring Boot中使用AOP统一处理Web请求日志 1,引入jar