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.查看效果



    沫笙
  • 相关阅读:
    改了一下分辨率,Areo特效奇迹般的恢复了...
    此连接需要活动的Internet连接
    Apple Mac OS X每日一技巧026:Spotlight打开文件所在的文件夹
    WP7有约(八):在ListPicker控件的选择页面上播放铃声
    WP7有约(七):实现铃声设置的播放图标的效果
    WP7有约(五):回到主页
    WP7有约:一个应用的破蛋过程
    WP7有约(六):AppBarUtils使用指南
    IE与firefox事件处理
    C#试题
  • 原文地址:https://www.cnblogs.com/wendy-0901/p/14355693.html
Copyright © 2011-2022 走看看