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

Posted leeindex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot 基础之使用AOP统一处理请求日志使用方法相关的知识,希望对你有一定的参考价值。

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

    <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");



以上是关于spring boot 基础之使用AOP统一处理请求日志使用方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot中使用AOP统一处理Web请求日志

Spring Boot中使用AOP统一处理Web请求日志

Spring Boot中使用AOP统一处理Web请求日志

spring boot 中AOP的使用

使用AOP统一处理Web请求日志

分享spring boot controller统一日志代码