step1: pom相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
step2:ApiLogAspect
public class ApiLogAspect implements MethodInterceptor {
private Logger logger = LoggerFactory.getLogger("api");
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//记录执行开始时间,访问路径,入参,日期和访问者IP信息等
long startTime = System.currentTimeMillis();
logger.info("#Request : " + request.getRequestURL().toString() + " #Method : " + request.getMethod()
+ " #Remote IP : " + request.getRemoteAddr() + " #Param : " + Arrays.asList(methodInvocation.getArguments()));
try {
Object object = methodInvocation.proceed();
//记录执行完成后,返回的参数
logger.info("#Response : " + request.getRequestURL().toString() + " #Method : " + request.getMethod()
+ " #Remote IP : " + request.getRemoteAddr() + " #Result : " + object + " #Finished : "
+ (System.currentTimeMillis() - startTime) + "ms");
return object;
} catch (Exception e) {
//记录异常时的原因
logger.info("#Response : " + request.getRequestURL().toString() + " #Method : " + request.getMethod()
+ " #Remote IP : " + request.getRemoteAddr() + " #Result : " + e.getMessage() + " #Finished : "
+ (System.currentTimeMillis() - startTime) + "ms");
throw e;
}
}
}
step3:ApiLogAspect
@Configuration
public class ApiLogAspectConfig {
@Bean
public AspectJExpressionPointcutAdvisor apiAdviceAdvisor() {
AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor();
advisor.setExpression("execution(public * com.*.*.controller..*.*(..))");
advisor.setAdvice(new ApiLogAspect());
return advisor;
}
}