首页 > 其他分享 >统一controller的日志记录

统一controller的日志记录

时间:2023-05-06 10:24:18浏览次数:38  
标签:parameterNames 请求 记录 controller result 日志 pjp append String

定义切面,然后匹配controller,around进行log打印

@Slf4j
@Component
@Aspect
public class ControllerLogAspect {
    @Pointcut("execution(* delta.main.controller..*(..))")
    public void requestServer() {
    }

    @SneakyThrows
    @Around("requestServer()")
    public Object doAround(ProceedingJoinPoint pjp) {
        //记录请求开始执行时间:
        long beginTime = System.currentTimeMillis();
        //获取请求信息
        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = sra.getRequest();
        //获取请求地址、请求类名、方法名
        String requestMethod = request.getMethod();
        String requestURI = request.getRequestURI();
        String methodName = pjp.getSignature().getName();
        String clazzName = pjp.getTarget().getClass().getName();

        //获取请求参数:
        MethodSignature ms = (MethodSignature) pjp.getSignature();
        //获取请求参数类型
        String[] parameterNames = ms.getParameterNames();
        //获取请求参数值
        Object[] parameterValues = pjp.getArgs();
        StringBuilder paramsStringBuilder = new StringBuilder();
        //组合请求参数,进行日志打印
        if (parameterNames != null && parameterNames.length > 0) {
            for (int i = 0; i < parameterNames.length; i++) {
                if ((parameterValues[i] instanceof HttpServletRequest) || (parameterValues[i] instanceof HttpServletResponse)) {
                    paramsStringBuilder.append("[").append(parameterNames[i]).append("=").append(parameterValues[i]).append("]");
                } else {
                    paramsStringBuilder.append("[").append(parameterNames[i]).append("=").append(JsonUtils.toJSONString(parameterValues[i])).append("]");
                }
            }
        }
        Object result = pjp.proceed();
        String resultJson = (result != null) ? ((result instanceof Result) ? JsonUtils.toJSONString(result) : String.valueOf(result)) : "";
        //记录请求完成执行时间:
        long usedTime = System.currentTimeMillis() - beginTime;
        //记录日志
        log.info("\n请求执行完毕!\n" +
                "URI信息:{}\n" +
                "请求方式:{}\n" +
                "请求耗时:{}ms\n" +
                "请求响应方法:{}\n" +
                "请求参数列表:{}\n" +
                "返回值:{}", requestURI, requestMethod,usedTime, clazzName + "#" + methodName, paramsStringBuilder.toString(), resultJson);
        return result;
    }
}

标签:parameterNames,请求,记录,controller,result,日志,pjp,append,String
From: https://www.cnblogs.com/PythonOrg/p/17376208.html

相关文章

  • 【博学谷学习记录】超强总结,用心分享 | 知识点总结1
    【博学谷IT技术支持】zookeeper基础架构是:主从架构安装虚拟机必须安装jdk角色:leader,Follower,Observerzookeeper的特性全局一致性顺序性原子性实时性zookeeper的watch机制zookeeper的选举机制hadoop基础主从集群NameNodeSecondaryNamenodeDataNodeHDFS......
  • LeetCode刷题记录|LeetCode热题100|226.翻转二叉树(easy)
    题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。 思路与算法:从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,只需交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。时间复......
  • 【博学谷学习记录】超强总结,用心分享 | 知识点总结2
    【博学谷IT技术支持】请简述HDFS上传文件的过程1.客户端将文件分成固定大小的block(默认128MB)2.客户端与NameNode通信,请求上传文件,并获取上传目标节点的信息3.客户端将第一个数据块上传到目标节点,并告知NameNode该节点上存储的数据块信息4.目标节点将数据块写入本地磁盘......
  • SpringBoot配置mongodb打印日志
    在application.yml添加配置:logging:level:org.springframework.data.mongodb.core.MongoTemplate:DEBUG如果使用的是application.properties,则是:logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG......
  • ubuntu Linux 一些知识的记录
    目录文件夹带锁导致里面文件无法读写如何处理文件夹带锁导致里面文件无法读写如何处理单个文件带锁sudochmod777filename文件夹带锁sudochown-Rusernamefilename......
  • docker-compose 记录一个让人抓狂的错误
    执行一个包含多个service的docker-compose.yml的时候,出现以下错误:strconv.Atoi:parsing"":invalidsyntax看字面上的意思,很明显就是yml文件有语法问题。在多次修改无果后,百度了这个问题,终于找到了能够解决的办法。docker-composedown--remove-orphans使用上面命令......
  • Linux上定期清空持续输出的日志文件
    Linux定期清空持续输出的日志文件的方法(nohup)前言在nohup输出文件过程中,很容易出现输出日志文件过大的问题,网上的炫技大佬们太多了,让愚钝的阿瓜很难一下子捕捉到关键信息,虽然方法很简单,但阿瓜记性很差,难免以后不会手忙脚乱,故记录一下阿瓜找到的在不打断进程的条件下定期清空文件......
  • 记录一次非常麻烦的调试
    此次记录一次非常麻烦的调试问题,不是纯知识分享,只是记录这次调试过程引以为戒。问题简介这个功能是公司2021年写的老功能,一直都没有更新过代码,这次在导入一个1.03G的大文件进行读取的过程中出问题了。简单介绍一下这个功能:公司使用的springboot框架构建项目,该功能为项目内的......
  • 日志查询常用命令
    tailtail-fa.log实时显示日志输出Ctrl+c退出tail-n10a.log显示日志倒数10行tail-n+10a.log显示第10行到最后行headcattac反向cata.log一次查看这个日志cat-na.log一次查看整个日志并且编上行号包括空白行cata.log|more显示满屏暂停,空格翻页,Ctrl+B返回......
  • 记录-Symbol学习笔记
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助Symbol是JavaScript中的原始数据类型之一,它表示一个唯一的、不可变的值,通常用作对象属性的键值。由于Symbol值是唯一的,因此可以防止对象属性被意外地覆盖或修改。以下是Symbol的方法和属性整理:属性Symbol.length......