使用 AOP + 自定义注解 实现 controller的日志打印

首先引入aop pom依赖

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.0.8.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
      <scope>compile</scope>
    </dependency>

1.创建注解类 Log

package com.zhdj.common.annotation;

/**
 * 被该注解注释的方法会打印日志
 * @author 博博
 * @time 2020/5/25
 */
public @interface Log {
}

2.创建 aop切面类,来进行对 自定义注解的切入

package com.zhdj.common.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

@Component
// lombok 的日志注解
@Slf4j
// 该注解 标识这是个aop类
@Aspect
public class LogAop {

    /**
     * 切入被该注解标志的方法切入
     */
    @Pointcut("@annotation(com.zhdj.common.annotation.Log)")
    public void logPointcut() {

    }

    /**
     * 前置切入
     */
    @Before("logPointcut()")
    public void doBefore(JoinPoint jp) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        System.out.println();
        log.info("请求路径:" + request.getRequestURL().toString());
        log.info("请求类型:" + request.getMethod());
		Enumeration<String> enu = request.getParameterNames();
		while (enu.hasMoreElements()) {
			String name = enu.nextElement();
			log.info("属性名:{},属性值:{}", name, request.getParameter(name));
		}
    }

    /**
     * 后置切入
     */
	@AfterReturning(returning = "obj", pointcut = "logPointcut()")
	public void doAfter(Object obj) {
		log.info("调用结束.... 返回值:{} ",obj);
	}
}

3.在需要打印日志的controller方法 上加上@Log注解
在这里插入图片描述
前置切入
在这里插入图片描述
后置切入
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值