springboot的sql日志打印与AOP实现接口调用日志打印

2023-05-16

Springboot的sql日志打印与AOP实现接口调用日志打印

` 1、Springboot与mybatis或者mybatisplus 打印sql执行语句。使用的是springboot中内部嵌入的日志框架。

2、接口调用日志,主要是区分当前接口的调用情况。其中包括调用接口的url,接口名称,调用方式,入参和出参等数据`
例如:第一章 Python 机器学习入门之pandas的使用


文章目录

  • Springboot的sql日志打印与AOP实现接口调用日志打印
  • 一、打印sql查询日志
  • 二、打印接口调用日志


一、打印sql查询日志

1、在application.yml中配置
(1)配置日志打印级别

logging:
  level:
    root: INFO

(2)mybtais或者mybatisplus 配置 打印sql

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

二、打印接口调用日志

1、目标:打印调用接口的url,传入参数,出参,运行时间
2、实现方式:使用AOP切面编程的方式 打印接口调用日志
3、引入依赖

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

4、切面编程的代码

package com.example.sso.tool;


import com.alibaba.fastjson.JSONObject;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;

/**
 * @author dk
 * @version 1.0.0
 * @ClassName WebLogAspect.java
 * @Description TODO
 * @createTime 2022年10月13日 10:47:00
 */
@Aspect
@Component
public class WebLogAspect {
    private final static Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
    /** 以 controller 包下定义的所有请求为切入点 */
    @Pointcut("execution(public * com.example.sso.controller..*.*(..))")
    public void webLog() {}
    /**
     * 在切点之前织入
     * @param joinPoint
     * @throws Throwable
     */
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 开始打印请求日志
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 打印请求相关参数
        logger.info("========================================== Start ==========================================");
        // 打印请求 url
        logger.info("URL            : {}", request.getRequestURL().toString());
        // 打印 Http method
        logger.info("HTTP Method    : {}", request.getMethod());
        // 打印调用 controller 的全路径以及执行方法
        logger.info("Class Method   : {}.{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
        // 打印请求的 IP
//        logger.info("IP             : {}", request.getRemoteAddr());
        // 打印请求入参
        String s = JSONObject.toJSONString(joinPoint.getArgs());
        logger.info("Into Parameters: {}", s );
    }
    /**
     * 在切点之后织入
     * @throws Throwable
     */
    @After("webLog()")
    public void doAfter() throws Throwable {
        logger.info("=========================================== End ===========================================");
        // 每个请求之间空一行
        logger.info("");
    }
    /**
     * 环绕
     * @param proceedingJoinPoint
     * @return
     * @throws Throwable
     */
    @Around("webLog()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object result = proceedingJoinPoint.proceed();
        // 打印出参
        String s = JSONObject.toJSONString(result.toString());
        logger.info("Return Results : {}", s);
        // 执行耗时
        logger.info("Time-Consuming : {} ms", System.currentTimeMillis() - startTime);
        return result;
    }
}

Aop切面编程 请自行百度了解

代码里里面有fastjson 的使用,所以在添加依赖的时候 需要添加fastjson 的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <!--(起码1.2.48以上)因为这个版本一下存在漏洞-->
    <version>1.2.58</version>
</dependency>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot的sql日志打印与AOP实现接口调用日志打印 的相关文章

  • 记录在Deepin Linux 20 beta深度应用商店(安装失败:依赖关系不满足)、(一直显示等待下载)的软件无法安装问题的解决方案

    可能是由于最近一段时间博主使用Deepin Linux 20 beta操作系统安装了各种软件 xff0c 而某些安装的软件损坏了Deepin20的依赖关系 xff0c 因此今天深度应用商店出了问题 刚开始是深度商店怎么都打不开 xff0c
  • k8s hostPath

    hostPath hostPath 卷能将主机节点文件系统上的文件或目录挂载到您的 Pod 中 虽然这不是大多数 Pod 需要的 xff0c 但是它为一些应用程序提供了强大的逃生舱 例如 xff0c hostPath 的一些用法有 xff1
  • openstack介绍及原理

    openstack介绍及原理 文章目录 什么是openstack 云计算模式OpenStack 中有哪些项目 xff1f Openstack创建实例的流程总图openstack项目搭建 xff1a 什么是openstack OpenStac
  • 生产者消费者模型(多-多模型/面向对象思想实现)

    本篇文章将用c 43 43 的面向对象思想 xff0c 实现生产者消费者模型的代码编写 个人感悟 xff1a 1 多生产者多消费者模型的共享竞争关系 xff1a 对缓冲区的共享和竞争 xff1a 生产者和消费者都需要对共享缓冲区进行操作 x
  • openstack报错排查

    openstack各个组件 openstack要保证各个组件能正常启动 否则创建实例等会报错 在启动openstack的时候 要查看各个服务是否正常启动了 xff0c 如果有部分服务没有启动 xff0c 则项目不能正常运行 root 64
  • vim如何批量注释

    1 ctrl 43 v 进入 2 按箭头 选中要注释的首行 3 按下大写 i 进入插入模式 4输入 按esc 就可以看到如下内容
  • vim中的替换

    Vim可以在尾行模式下使用 substitute命令将指定的字符串替换成其他目标字符串 通常我们可以使用该命令的缩写格式 s进行来进行vim字符串替换操作 一 Vim替换字符串命令的语法 Vim替换字符串命令的基本语法是 range s 目
  • docker删除无用的镜像等操作

    提供 prune命令 xff0c 用于移除不使用的镜像 容器 卷 网络 Prune images docker image prune移除没有标签并且没有被容器引用的镜像 xff0c 这种镜像称为 dangling 摇晃的 镜像 示例1 x
  • Python之requests模块-session

    http协议本身是无状态的 xff0c 为了让请求之间保持状态 xff0c 有了session和cookie机制 requests也提供了相应的方法去操纵它们 requests中的session对象能够让我们跨http请求保持某些参数 xf
  • git 对比两个分支差异

    1 显示出branch1和branch2中差异的部分 git diff branch1 branch2 stat 2 显示指定文件的详细差异 git diff branch1 branch2 具体文件路径 3 显示出所有有差异的文件的详细差
  • 操作系统中cpu如何工作

    扩充小知识 xff1a 这些硬件设备在一条总线上链接 xff0c 他们通过这条线进行数据交互 xff0c 里面的带头大哥就是CPU xff0c 拥有最高指挥权 那么它是如何工作的呢 xff1f A 取指单元 xff08 从内存中取得指令 x
  • dev/mapper的解释

    二 dev mapper目录的解释 为了方便叙述 xff0c 假设一台服务器有三块硬盘分别为a xff0c b xff0c c xff0c 每块硬盘的容量为1T 在安装Linux的时候 xff0c 先根据系统及自身的需要建立基本的分区 xf
  • Centos安装python39(其他版本也是一样的流程)

    Centos安装python39 其他版本也是一样的流程 centos安装python39 其他版本也是一样的流程 1 下载python39 可以去官网下载 xff0c 也可以去华为云下载 华为云 xff1a Index of python
  • centos 中如何启动两个rabbitmq 服务

    启动两个rabbitmq 服务 sudo RABBITMQ NODE PORT 61 5672 RABBITMQ DIST PORT 61 15672 RABBITMQ SERVER START ARGS 61 34 rabbitmq ma
  • 【码农本色】用数据解读我的2014

    转眼2014就过去了 xff0c 不禁感叹又老了一岁的同时 xff0c 却发现已经快研究生毕业了 xff0c 趁着这个活动简单总结下2014 1 实习篇 2014年一月份拿到了人生第一个实习offer xff0c 在sony这样的大公司做a
  • 出现Permission denied (publickey)的解决方法

    ssh root 64 10 240 1 161 报错 1 发现问题 在Linux终端使用ssh root 64 server ip来连接到远程服务器时 xff0c 出现Permission denied publickey 提示 2 分析
  • 23年4月开发语言最新排行榜公布

    随着时代的发展 xff0c 编程语言也在不断演化和发展 xff0c 每一种编程语言都有着其独特的特性和适用场景 在这篇博客中 xff0c 我们将来探讨一下各大编程语言的排行榜 xff0c 以及它们各自的优缺点和应用场景 下面是最新的 Tio
  • CommandNotFoundError: No command ‘conda activate‘

    前言 xff0c 在windows下使用coda 虚拟环境时 xff0c 在激活环境 conda activate env name 时 xff0c 报错找不到 conda activate 的命令 浪费了好久的时间 xff0c 找到了合适
  • Spring、SpringMVC常用注解总结

    一 Spring常用注解 64 Component xff1a 标注一个普通的Spring Bean类 64 Controller xff1a 标注一个控制器组件类 64 Service xff1a 标注一个业务层组件类 64 Reposi
  • 关于Ubuntu fix-broken 的使用

    执行命令 xff1a sudo apt fix broken install sudo apt get update sudo apt get upgrade 运行后可以解决由于依赖包缺失或错误引起的无法通过apt get来安装应用

随机推荐

  • java看书规划

    Java编程思想 大话设计模式 重构 改善既有代码的设计 effective java 深入理解Java虚拟机 Java并发编程实战 深入理解计算机系统 xff0c tcp ip详解 卷一 二 三 xff0c 数据结构与算法 xff08 三
  • 粗读Targeted Supervised Contrastive Learning for Long-Tailed Recognition

    相比于直接对图像进行分类 xff0c 本文更关注特征提取部分 xff0c 通过令提取的不同类特征在超球面上尽可能远离 xff0c 让属于同一类的特征尽可能靠近 xff0c 来提高模型面对样本不平衡时的分类性能 这是本文的方法和效果示意图 第
  • 运行 npm install 报错 command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node build.js

    运行 npm install 报错 command failed npm ERR command C Windows system32 cmd exe d s c node build js nodejs build js 具体看图片 xf
  • e2fsprogs : 预依赖: e2fslibs (= 1.42.13-1ubuntu1) 但是 1.42.13-1ubuntu1.1 正要被安装 E: 有未能满足的依赖关系

    问题 1 E 无法获得锁 var lib dpkg lock open 11 资源暂时不可用 E 无法锁定管理目录 var lib dpkg xff0c 是否有其他进程正占用它 xff1f 2 下列软件包有未满足的依赖关系 xff1a e2
  • 操原上机(二) 模拟实现“生产者-消费者”问题

    实验内容 在 windows 环境下 xff0c 利用高级语言编程环境 xff08 限定为 VS 环境或 VC 环境 xff09 调用 CreateThread 函数和相关的同步函数 xff0c 模拟实现 生产者 消费者 问题 实验过程 首
  • 普通程序员如何入门AI

    毫无疑问 xff0c 人工智能是目前整个互联网领域最火的行业 xff0c 随着AlphaGo战胜世界围棋冠军 xff0c 以及各种无人驾驶 智能家居项目的布道 xff0c 人们已经意识到了AI就是下一个风口 当然 xff0c 程序员是我见过
  • Arch Linux 安装简明流程

    Arch Linux 安装简明流程 这是一篇为 GPT EFI 引导 的电脑安装 Arch Linux xff08 双系统 xff09 的中文简明流程 xff0c 尽可能省略了可以省略的流程与文字以使得篇幅尽量短小 xff0c 基本上基于
  • python 数据文件上传到ftp服务器

    场景 xff1a 客户的某数据文件需要定时推送到一个第三方平台的ftp服务器上 xff0c 第三方平台会对上传过来的数据文件进行解析 一 通过FTP将文件上传到服务器 xff0c 需要满足以下几个条件 xff1a 本服务器和ftp服务器是联
  • 基于web系统的一个小型简单管理系统

    系统简介 本系统提供给暮云办公室的工作人员使用 权限包含 xff1a 检索信息 更新信息 删除信息技术路线 1 前端 xff1a html 43 ccs 43 js 采用框架 xff1a jquery 43 bootstrap 2 后端 x
  • 修改 Ubuntu 系统用户名和登录名

    在终端中 xff0c 命令行前面的字符串格式为用户名 64 主机名 路径 若要将老用户名user改为新用户名robot xff0c 请按照下面的顺序修改 xff08 0步骤可以跳过 xff09 xff1a 修改主机名 xff08 如果需要的
  • BT下载磁力下载工具,这几款,不限速

    想看个电影 xff0c 迅雷限速 xff0c 经常还因为某些原因下不了 xff0c 下载电影 xff0c BT下载工具总少不了 xff0c 今天给大家推荐这几款BT下载磁力链接下载工具 不限速下载 xff0c 超爽 xff01 一 Motr
  • ubuntu22.04桌面图标不显示的可能情况之一

    我自己的ubuntu突然不显示桌面图标了 xff0c 但文件管理器可以看到desktop目录下其实有文件的 xff0c 在网上找了很多方法也无济于事 xff0c 最后无意中点了下gnome插件里的一个选项 xff0c 问题就解决了 xff0
  • QT开发笔记(Serial Port )

    Serial Port Qt 提供了串口类 xff0c 可以直接对串口访问 我们可以直接使用 Qt 的串口类编程即可 xff0c 十分 方便 Qt 串口类不仅在 Windows 能用 xff0c 还能在 Linux 下用 xff0c 虽然串
  • ubuntu14.04版本下在目录下快捷打开终端

    在Ubuntu 14中 xff0c 您可以通过Nautilus文件管理器的右键菜单来快速打开终端窗口 xff0c 而无需切换到终端模式 具体的操作步骤如下 xff1a 打开Nautilus文件管理器 xff0c 并进入要打开终端窗口的目录
  • SQL SERVER添加注释的快捷键

    SQL SERVER添加注释 添加注释删除注释 添加注释 Ctrl 43 K xff0c C xff08 按住Ctrl xff0c 然后按K xff0c 接着按C xff09 删除注释 Ctrl 43 K xff0c U xff08 按住C
  • 多线程经典题目

    多线程编程 目录 文章目录 多线程编程目录work1work2work3work4work5work6work7work8锁的实现线程间同步唤醒 阻塞交替打印方式相关blogLambda原子类型理论锁模型Java锁底层实现 work1 sp
  • 抖音短视频脚本制作的一些技巧,快快收藏起来!

    在抖音上发布一个成功的短视频需要多方面的考虑 xff0c 其中最重要的是脚本的制作 一个好的脚本不仅可以吸引用户观看 xff0c 还可以让用户产生共鸣 xff0c 从而提高视频的传播效果 以下是不若与众科技一些关于抖音短视频脚本制作的技巧
  • java中http请求带cookie

    span class hljs built in String span urlPath 61 span class hljs string 34 你的请求链接 34 span span class hljs built in String
  • Linux系统下使用rpm安装时失败 出现错误:“依赖检测失败” 解决方法

    今天长青在重新安装yum的时候出现了这种错误 xff0c 提示 依赖检测失败 解决方法 xff1a 在命令末尾加上 nodeps force 参数意思 xff1a nodeps xff1a 不检测依赖关系 force xff1a 强制安装
  • springboot的sql日志打印与AOP实现接口调用日志打印

    Springboot的sql日志打印与AOP实现接口调用日志打印 96 1 Springboot与mybatis或者mybatisplus 打印sql执行语句 使用的是springboot中内部嵌入的日志框架 2 接口调用日志 xff0c