springboot_03请求日志统一记录-aop

在工作中每次请求接口,先打印一下日志,看看接收的参数是什么,在代码开头,记录的大量的logger.info等信息,之前就忍了,懒得弄,反正都是复制粘贴,这次新弄东西,就想弄一下,不需要弄的多好,最起码是把请求参数记录一下,好了,废话不说了,做了一个简单的例子。

1 .TestAop和HelloLogCotroller是两个入口Controller,logAop是切面类,结构大概就这样。如图


2.aop的配置:

/**
 * Created by zpx on 2018/3/21.
 * @Aspect 表示是一个切面
 * @Pointcut 表示切入点,可以是表达式,也可以是注解,我这里用的是表达式
 * @AfterReturning 和@After不同的是,表示在得到返回内容后切入,
 */
@Aspect
@Component
public class logAop {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    ThreadLocal<Long> startTime = new ThreadLocal<>();

    //这个表达式的意思是,HelloLogCotroller这个controller下所有的方法都会切入
    @Pointcut("execution(* com.lbb.log.web.HelloLogCotroller.*(..))")
    public void setLogger(){}

    @Before("setLogger()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        startTime.set(System.currentTimeMillis());
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        // 记录下请求内容
        logger.info("请求url : " + request.getRequestURL().toString());
        logger.info("请求类型 : " + request.getMethod());
        logger.info("IP(这块重点不在ip) : " + request.getRemoteAddr());
        logger.info("接口包路径 : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        logger.info("参数 : " + Arrays.toString(joinPoint.getArgs()));

    }

    @AfterReturning(returning = "ret", pointcut = "setLogger()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 处理完请求,返回内容
        logger.info("RESPONSE : " + ret);
        logger.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get()));
    }


}

2. 访问HelleLogCotroller类下的方法:http://localhost:8080/getlog?name=lbb&age=18

得到日志:

17:47:11.164 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - 请求url : http://localhost:8080/getlog
17:47:11.164 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - 请求类型 : GET
17:47:11.164 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - IP(这块重点不在ip) : 0:0:0:0:0:0:0:1
17:47:11.166 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - 接口包路径 : com.lbb.log.web.HelloLogCotroller.getLog
17:47:11.166 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - 参数 : [UserModel{age=18, name='lbb'}]
17:47:11.169 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - RESPONSE : success

17:47:11.169 [http-nio-8080-exec-1] INFO  com.lbb.log.aspect.logAop - SPEND TIME : 5

3.访问TestAop下面的方法:http://localhost:8080/testLog?name=lbb&age=18

没有打印日志,结束!

参考文献:http://blog.didispace.com/springbootaoplog/

发布了23 篇原创文章 · 获赞 3 · 访问量 6858

猜你喜欢

转载自blog.csdn.net/weixin_41834814/article/details/79642845