首页 > 编程语言 >java springboot 初体验 (六)添加统一的入参出参打印日志(使用切面)

java springboot 初体验 (六)添加统一的入参出参打印日志(使用切面)

时间:2022-08-22 14:13:03浏览次数:67  
标签:info 初体验 java springboot -- request import concat 请求

  1. 上一篇
    1. java springboot 初体验 (五)对接apollo
    2. https://www.cnblogs.com/zwjvzwj/p/16602858.html
  2. pom文件中添加依赖
    1.         <!-- 切面 -->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-aop</artifactId>
              </dependency>

       

    2.  
  3.  新增一个切面package和文件
    1. package com.zwj.zwjproject.aspect;
      
      import com.google.gson.Gson;
      import lombok.extern.slf4j.Slf4j;
      import org.aspectj.lang.JoinPoint;
      import org.aspectj.lang.ProceedingJoinPoint;
      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;
      
      /**
       * @ClassName: WebLogAspect
       * @Author zhangwujie
       * @Date 2022/8/22 11:32 上午
       * @Description:
       */
      @Aspect
      @Slf4j
      @Component
      public class WebLogAspect {
      
          /** 以 controller 包下定义的所有请求为切入点 */
          @Pointcut(value = "execution(public * com.zwj.zwjproject.controller..*.*(..)))")
          public void webLog(){}
      
          /**
           * @apiNote 切点之前植入
           * @param joinPoint joinPoint
           */
          @Before("webLog()")
          public void doBefore(JoinPoint joinPoint) {
              try {
      
                  // 开始打印请求日志
                  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                  assert attributes != null;
                  HttpServletRequest request = attributes.getRequest();
                  // 打印请求相关参数
                  log.info("========================================== Start ==========================================");
      //        .concat(" -- request_id】:").concat(requestId);
                  String sb = "".concat("请求 URL : ").concat(request.getRequestURL().toString())
                      .concat(" -- 请求 Method : ").concat(request.getMethod())
                      .concat(" -- 请求 query :").concat(request.getQueryString())
                      .concat(" -- 请求 body :").concat(Arrays.toString(joinPoint.getArgs()))
                      .concat(" -- 请求 IP :").concat( request.getRemoteAddr())
                      .concat(" -- 请求类名:").concat(joinPoint.getSignature().getDeclaringTypeName())
                      .concat(" -- 请求方法名 :").concat(joinPoint.getSignature().getName())
                      .concat(" -- 请求参数 :").concat(request.getParameterMap().toString());
                  log.info("Request Args   : {}", sb);
              } catch (Exception e) {
                  log.info("Request Args catch error msg : {}", e.getMessage());
              }
          }
      
          /**
           * 在切点之后织入
           */
          @After("webLog()")
          public void doAfter() {
              // 每个请求之间空一行
              log.info("");
          }
          /**
           * 环绕
           * @param proceedingJoinPoint proceedingJoinPoint
           * @return Object
           * @throws Throwable Throwable
           */
          @Around("webLog()")
          public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
              long startTime = System.currentTimeMillis();
              Object result = proceedingJoinPoint.proceed();
              // 打印出参
              log.info("Response Args  : {}", new Gson().toJson(result));
              // 执行耗时
              log.info("Time-Consuming : {} ms", System.currentTimeMillis() - startTime);
              // 结束
              log.info("=========================================== end ===========================================");
              return result;
          }
      
      }
    2.  
  4. 调用接口查看效果

  5.   下一篇
    1.   

       

       

       

       

标签:info,初体验,java,springboot,--,request,import,concat,请求
From: https://www.cnblogs.com/zwjvzwj/p/16612094.html

相关文章

  • 动易CMS粘贴图片自动上传到服务器(Java版)
    ​ tinymce是很优秀的一款富文本编辑器,可以去官网下载。https://www.tiny.cloud这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用。umedit......
  • Java SE 18 新增特性
    JavaSE18新增特性作者:Grey原文地址:JavaSE18新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_features默认使用UFT-8编码在JavaSE......
  • ArcGIS API for JavaScript Editor Widget 选中多个要素不显示名称
    背景 最近升级时遇到了之前碰到的问题,但是忘记解决方法了。又重新对比了旧代码才找到,所以记录下。FeatureLayer的构建方式不是url,而是用的source环境 Vu......
  • JAVA中子类使用super.getClass()方法
    一般来说,java中调用getClass().getName()这个方法可以获取本类的名称,例如:importjava.util.Date;publicclassTest06extendsDate{publicstaticvoidmain(St......
  • JAVA基础--数组--2022年8月21日
    第一节数组静态定义方式1、数组的静态初始化的写法和特点是什么样的?  2、数组属于什么类型,数组变量中存储的是什么?引用数据类型,存储的是......
  • Java实现BCD编码与十进制转换
    1、BCD码介绍BCD码(Binary-CodedDecimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编......
  • 【JavaScript】各种手写题汇总复习
    防抖functionthrottle(fun,time){lettimer=nullreturn()=>{if(timer){return}fun()timer=setTimeout(()=>{time......
  • 【Java基础】循环结构for、while、嵌套循环、关键字break、continue
    1.for循环for(inti=0;i<10;i++){System.out.println(i);}执行过程说明(1)循环条件部分②为boolean类型表达式,当值为false时,......
  • Java企业级开发中异常处理的问题
    在企业级开发中,异常的处理和学习中的异常处理差别还是挺大的;在学习中我们了解的是异常的分类和处理异常的方法,而在真实工作中我们要注重异常处理是否得当,因为不得当的异......
  • JAVA---04
    第四天1.Java方法什么是方法方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中......