java 切面日志_SpringBoot实现Aop切面日志

1.导入aop依赖 (springboot已经默认开启了aop,只用导入相关依赖即可)

org.springframework.boot

spring-boot-starter-aop

2.编写切面类

import lombok.extern.slf4j.Slf4j;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.*;

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.Arrays;

/**

* aop 日志

*/

@Aspect

@Component

@Slf4j

public class LogAspect {

/**

* 两个..代表所有子目录,最后括号里的两个..代表所有参数

* cn.yan 换成自己的包路径

*/

@Pointcut("execution(* cn.yan..controller.*.*(..))")

public void logPointCut() {

}

/**

* 执行前操作

* @param joinPoint

*/

@Before("logPointCut()")

public void doBefore(JoinPoint joinPoint){

// 接收到请求,记录请求内容

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request = attributes.getRequest();

// 记录下请求内容

log.info("请求地址 : " + request.getRequestURL().toString());

log.info("HTTP METHOD : " + request.getMethod());

log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."

+ joinPoint.getSignature().getName());

log.info("参数 : " + Arrays.toString(joinPoint.getArgs()));

}

/**

* 执行后打印日志

* returning的值和doAfterReturning的参数名一致

* @param ret

*/

@AfterReturning(returning = "ret", pointcut = "logPointCut()")

public void doAfterReturning(Object ret) {

// 处理完请求,返回内容(返回值太复杂时,打印的是物理存储空间的地址)

log.info("返回值 : " + ret);

}

/**

* 环绕通知做打印耗时

* 也可以把上面的2个合到这里来

* @param pjp

* @return

* @throws Throwable

*/

@Around("logPointCut()")

public Object doAround(ProceedingJoinPoint pjp) throws Throwable {

long startTime = System.currentTimeMillis();

// ob 为方法的返回值

Object ob = pjp.proceed();

log.info("耗时 : " + (System.currentTimeMillis() - startTime));

return ob;

}

}

3.测试,新建controller,并访问

@PostMapping(value = "/testAspect",produces = "application/json;charset=UTF-8")

public User testAspect(@RequestBody User user){

return user;

}

4.日志打印结果如下

23be415fe6b5b9cb42c8a63b479195a9.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值