zoukankan      html  css  js  c++  java
  • Spring boot ---aop统一打印日志

    1.首先导入我的aop依赖包

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    2.切面代码,用来拦截接口传输时和返回时的打印日志

    package demo.aop;

    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.time.LocalDateTime;
    import java.util.Arrays;

    @Aspect
    @Component
    @Slf4j
    public class WebLogAspect {
    /**
    * 进入方法时间戳
    */
    private Long startTime;
    /**
    * 方法结束时间戳(计时)
    */
    private Long endTime;
    public WebLogAspect() {
    }
    /**
    * 定义请求日志切入点,其切入点表达式有多种匹配方式,这里是指定路径
    *第一个.*代表controller下所有的类
    * 第二个.*代表每个类里面的方法
    * (..)代表每个方法中的参数
    */
    @Pointcut("execution(public * demo.controller.*.*(..))")
    public void webLog() {
    }

    /**
    * 前置通知:
    * 1. 在执行目标方法之前执行,比如请求接口之前的登录验证;
    * 2. 在前置通知中设置请求日志信息,如开始时间,请求参数,注解内容等
    *
    * @param joinPoint
    * @throws Throwable
    */
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) {

    // 接收到请求,记录请求内容
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    //打印请求的内容
    startTime = System.currentTimeMillis();
    log.info("请求开始时间:{}" + LocalDateTime.now());
    log.info("请求Url : {}" + request.getRequestURL().toString());
    log.info("请求方式 : {}" + request.getMethod());
    log.info("请求ip : {}" + request.getRemoteAddr());
    log.info("请求方法 : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
    log.info("请求参数 : {}" + Arrays.toString(joinPoint.getArgs()));
    }

    /**
    * 返回通知:
    * 1. 在目标方法正常结束之后执行
    * 1. 在返回通知中补充请求日志信息,如返回时间,方法耗时,返回值,并且保存日志信息
    *
    * @param ret
    * @throws Throwable
    */
    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
    endTime = System.currentTimeMillis();
    log.info("请求结束时间:{}" + LocalDateTime.now());
    log.info("请求耗时:{}" + (endTime - startTime));
    // 处理完请求,返回内容
    log.info("请求返回 : {}" + ret);
    }

    /**
    * 异常通知:
    * 1. 在目标方法非正常结束,发生异常或者抛出异常时执行
    * 1. 在异常通知中设置异常信息,并将其保存
    *
    * @param throwable
    */
    @AfterThrowing(value = "webLog()", throwing = "throwable")
    public void doAfterThrowing(Throwable throwable) {
    // 保存异常日志记录
    log.error("发生异常时间:{}" + LocalDateTime.now());
    log.error("抛出异常:{}" + throwable.getMessage());
    }
    }

    3.编写实际代码来查看切面的正确性
    首先我们启动项目

     4.查看效果



    沫笙
  • 相关阅读:
    IDEA 的默认tomcat日志位置以及默认编译后的classes位置
    在linux环境下tomcat 指定 jdk或jre版本
    在Linux环境如何在不解压情况下搜索多个zip包中匹配的字符串内容
    说一下最近找的工作所遇到的一个巨坑,跟各位同行分享一下。(与技术无关)
    Jmeter 深入性能测试进阶-01
    英语
    python 01
    fiddler,ADB, Monkey
    http 协议,SSL证书,http头信息,tcp/http区别,支付功能测试
    扎马步-计算机网络和系统基础知识
  • 原文地址:https://www.cnblogs.com/wendy-0901/p/14355693.html
Copyright © 2011-2022 走看看