spring boot aop记录接口调用情况
  TEZNKK3IfmPf 2023年11月15日 18 0

引入依赖

<!-- 引入aop-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

定义日志实体

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;

@Data
@TableName("t_cmp_interlog")
public class InterFaceLog {

    @TableField("url")
    private String url;
    @TableField("method")
    private String method;
    @TableField("param")
    private String param;
    @TableField("callTm")
    private String callTm;
    @TableField("callerID")
    private Integer callerID;
    @TableField("callerAcc")
    private String callerAcc;
    @TableField("time")
    private Long time;
    @TableField("id")
    private String id;
    @TableField("remake")
    private String remake;
    @TableField("remoteAddr")
    private String remoteAddr;
    @TableField("class_method")
    private String class_method;
    @TableField("result")
    private String result;

}

切面实现日志记录,切面在controller层

import cn.com.suntree.cmp.common.ApiResult;
import cn.com.suntree.cmp.entity.InterFaceLog;
import cn.com.suntree.cmp.entity.SysUser;
import cn.com.suntree.cmp.service.InterFaceLogService;
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.beans.factory.annotation.Autowired;
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;
import java.util.Date;
import java.util.UUID;

@Aspect
@Component
public class WebLogAspect {
    @Autowired
    InterFaceLogService logService;

    ThreadLocal<Long> startTime = new ThreadLocal<>();
    ThreadLocal<InterFaceLog> log = new ThreadLocal<>();
    InterFaceLog interfaceLog =  new InterFaceLog();

    @Pointcut("execution(public * cn.com.suntree.cmp.controller.*.*(..))")
    public void webLog(){}

    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        startTime.set(System.currentTimeMillis());
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String url = request.getRequestURL().toString();
        String method = request.getMethod();
        String remoteAddr = request.getRemoteAddr();
        String class_method = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
        String param = Arrays.toString(joinPoint.getArgs());

        SysUser loginUser = CommonUtil.getLoginUser();
        if (!CommonUtil.check(loginUser)){
            return;
        }
        interfaceLog.setCallerAcc(loginUser.getAccNum());
        interfaceLog.setCallerID(loginUser.getUserID());
        interfaceLog.setClass_method(class_method);
        interfaceLog.setMethod(method);
        interfaceLog.setUrl(url);
        interfaceLog.setRemoteAddr(remoteAddr);
        interfaceLog.setParam(param);
        log.set(interfaceLog);
    }

    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
    String result = ret.toString();
        InterFaceLog logAfter =  log.get();
        Long time = System.currentTimeMillis() - startTime.get();
        logAfter.setResult(result);
        logAfter.setCallTm(DateUtil.dateToYMDHMS(new Date()));
        logAfter.setTime(time);
        logAfter.setId(UUID.randomUUID().toString());
        ApiResult apiResult = logService.addLog(logAfter);
        System.out.println("apiResult ------------ "+apiResult);
        System.out.println(logAfter);
    }
}

存入数据库步骤省略


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
TEZNKK3IfmPf