AOP创建日志(非注解型)

此方法为打印全部请求的日志,至于日志的插入本文不作介绍。

具体说明如下

使用Gradle 导包

compile 'org.springframework.boot:spring-boot-starter-aop

创建一个类

package cn.cityworks.utils;


import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect
@Component
public class AspectLog {

    Logger log = LoggerFactory.getLogger(AspectLog.class);

    /**
     * http访问方法之前 切入
     * 1.com.david.translate.controller.*.*
     * 这个路径 是一直要指定到你的方法层级。
     * 如:com.david.translate.controller.UserController。java
     * 需要配置的execution就是  com.david.translate.controller.*.*(..)
     * 第一个*指的是controller 下的所有类
     * 第二个*指的是类里面的所有方法
     * 2.如果这块指定的目录没有到方法,则会跑出异常。
     * @param join
     */
    @Before("execution(public * cn.cityworks.controller.*.*(..))")
    public void beforLog(JoinPoint join){
        ServletRequestAttributes attriButes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attriButes.getRequest();
        //打印url
        log.info("url:{}", request.getRequestURL());

        //打印请求方式
        log.info("requet_method:{}", request.getMethod());

        //打印类方法
        log.info("class_method:{}", join.getStaticPart().getSignature().getDeclaringTypeName()
                + "."
                + join.getSignature().getName());
        //打印参数
        log.info("parameter:{}", join.getArgs());

        //打印Ip
        log.info("ip:{}", request.getLocalAddr());
    }

    /**
     * http访问方法之后切入
     */
    @After("execution(public * cn.cityworks.controller.*.*(..))")
    public void afterLog(){
        log.info("======================请求离开=========================");
    }

    /**
     * 打印返回的数据
     * 1.returning 的值 和 resultLog中的入参一致
     * 2.pointcut 配置的是需要切入的配置
     * @param obj
     */
    @AfterReturning(returning="obj", pointcut="execution(public * cn.cityworks.controller.*.*(..))")
    public void resultLog(Object obj){
        log.info("return:{}", obj.toString());
    }
}


结果显示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/IT_Java_Roy/article/details/89356289