美文网首页
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统一处理请求日志使用方法

          本文链接:https://www.haomeiwen.com/subject/tohdqftx.html