aop切面日志

依赖添加

1
2
3
4
 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

切面日志类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.example.yunxiao_deploy_demo;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

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

@Slf4j
@Aspect
@Component
public class LogAspect {



/**
* 定义切入点
*/
@Pointcut("execution(* *(..)) && @within(org.springframework.web.bind.annotation.RestController)")
public void pointcut(){

}

/**
* @description 在连接点执行之前执行的通知
*/
@Before("pointcut()")
public void before(JoinPoint joinPoint){

}

/**
* @description 在连接点执行之后执行的通知(返回通知)
*/
@AfterReturning(pointcut = "pointcut()", returning = "object")
public void afterReturning(JoinPoint joinPoint, Object object){
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
log.info("请求地址 : " + request.getRequestURL().toString());
log.info("请求参数 : " + Arrays.toString(joinPoint.getArgs()));
ObjectMapper objectMapper = new ObjectMapper();
try {
log.debug("请求结果 : " + objectMapper.writeValueAsString(object));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}

/**
* @description 在连接点执行之后执行的通知(异常通知)
*/
@AfterThrowing(pointcut = "pointcut()", throwing = "ex")
public void afterThrowing(JoinPoint joinPoint, Exception ex){
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
log.error("请求地址 : " + request.getRequestURL().toString());
log.error("请求参数 : " + Arrays.toString(joinPoint.getArgs()));
if(ex.getStackTrace().length > 0){
StackTraceElement stackTraceElement = ex.getStackTrace()[0];
log.error("异常位置 : " + ex.getMessage() + " :" +stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + "("+stackTraceElement.getLineNumber()+")", ex);
} else {
log.error("异常位置 : " + ex.getMessage());
}
}
}