七.SpringBoot使用Aop监控接口的执行状况
时间: 2022-03-04 10:33:23
来源:网络
作者:自由
分类:SpringBoot框架入门
简介:
使用切面的方式,来监控后台调用接口执行的状况,方便后期出现bug进行追溯
一.配置Aop
1.在pom.xml中引入aop插件
<!--配置切面-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.编写配置文件
package com.tms.tblog.infrastructure.aop;
import com.alibaba.fastjson.JSONObject;
import com.tms.tblog.infrastructure.untils.IpUtil;
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.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Aspect
@Component
@Slf4j
public class HttpRequestAspect {
public static long startTime;
public static long endTime;
/*切点表达式*/
@Pointcut("execution(public * com.tms.tblog.controller.*.*(..))")
public void print() {
}
@Before("print()")
public void before(JoinPoint joinPoint) {
try {
startTime = System.currentTimeMillis();
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
String requestURI = request.getRequestURI();
String remoteAddr = IpUtil.getRealIpAddr(request);
String requestMethod = request.getMethod();
Object[] args = joinPoint.getArgs();
log.info("==================前置切面===================");
log.info("请求的URL : " + requestURI);
log.info("请求的方法名称为 : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
log.info("请求的客户端ip = " + remoteAddr);
if ("GET".equals(requestMethod)) {
log.info("请求的参数 : " + JSONObject.toJSONString(request.getParameterMap()));
} else {
log.info("请求的参数 : " + Arrays.toString(args));
}
} catch (Exception e) {
log.error(e.getLocalizedMessage());
}
}
@After("print()")
public void after() {
endTime = System.currentTimeMillis() - startTime;
}
@AfterReturning(pointcut = "print()", returning = "object")
public void getAfterReturn(Object object) {
try {
log.info("返回结果:" + JSONObject.toJSONString(object));
log.info("本次接口耗时={}ms", endTime);
log.info("==================后置切面===================");
} catch (Exception e) {
log.error(e.getLocalizedMessage());
}
}
}
二.执行结果
1.通过postman调用接口,查看后台控制台
_b0e75a30-0194-42e4-a9a0-8e39c3bf263d.png)
标签:java框架
文章声明
版权声明:本文为作者原创,仅用于本站访客学习、研究和交流目的,未经授权禁止转载
联系
作者

一个90后草根站长!13年入行。一直潜心研究技术,一边工作一边积累经验,分享一些个人后端技术(java、python、c#、php等),以及前端相关等心得。
站长
推荐
友情
链接
关注
公众号
