Spring Boot AOP日志打印实现
在 Spring Boot 3.1.12 中使用 AOP 实现日志打印,记录前端传入的参数和后端返回的数据,可以按照以下步骤进行:
- 添加依赖
首先,确保你的 pom.xml 文件中包含了 Spring AOP 的依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 创建切面类
接下来,创建一个切面类,使用 @Aspect 注解标记该类为切面,并使用 @Component 注解将其注册为 Spring Bean。
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;@Aspect
@Component
public class LoggingAspect {private final Logger logger = LoggerFactory.getLogger(this.getClass());// 定义切点,匹配所有Controller层的方法@Pointcut("execution(* com.example.demo.controller..*(..))")public void controllerMethods() {}// 在方法执行前打印请求参数@Before("controllerMethods()")public void logBefore(JoinPoint joinPoint) {logger.info("Method: {}", joinPoint.getSignature().toShortString());Object[] args = joinPoint.getArgs();for (Object arg : args) {logger.info("Request Param: {}", arg);}}// 在方法返回后打印返回结果@AfterReturning(pointcut = "controllerMethods()", returning = "result")public void logAfterReturning(JoinPoint joinPoint, Object result) {logger.info("Method: {}", joinPoint.getSignature().toShortString());logger.info("Response: {}", result);}
}
- 配置日志级别
确保你的 application.properties 或 application.yml 文件中配置了适当的日志级别,以便能够看到日志输出。
application.properties
logging.level.com.example.demo=DEBUG
- 测试
启动你的 Spring Boot 应用,并访问一些 Controller 方法,你应该能够在控制台中看到类似以下的日志输出:
2023-10-10 12:34:56.789 DEBUG 12345 --- [nio-8080-exec-1] com.example.demo.LoggingAspect : Method: ExampleController.exampleMethod
2023-10-10 12:34:56.789 DEBUG 12345 --- [nio-8080-exec-1] com.example.demo.LoggingAspect : Request Param: param1
2023-10-10 12:34:56.789 DEBUG 12345 --- [nio-8080-exec-1] com.example.demo.LoggingAspect : Request Param: param2
2023-10-10 12:34:56.789 DEBUG 12345 --- [nio-8080-exec-1] com.example.demo.LoggingAspect : Method: ExampleController.exampleMethod
2023-10-10 12:34:56.789 DEBUG 12345 --- [nio-8080-exec-1] com.example.demo.LoggingAspect : Response: ExampleResponse
- 进一步优化
你可以根据需要进一步优化切面,例如:
-
只记录特定注解标记的方法。
-
记录异常信息。
-
使用 @Around 注解来更灵活地控制方法的执行和日志记录。
通过这些步骤,你可以轻松地在 Spring Boot 3.1.12 中使用 AOP 实现日志打印,记录前端传入的参数和后端返回的数据。
相关文章:
Spring Boot AOP日志打印实现
在 Spring Boot 3.1.12 中使用 AOP 实现日志打印,记录前端传入的参数和后端返回的数据,可以按照以下步骤进行: 添加依赖 首先,确保你的 pom.xml 文件中包含了 Spring AOP 的依赖: <dependency><groupId>…...

Windows远程--如何使用IP访问服务器
1.第一步:在本地按下winR打开运行窗口,输入mstsc 打开window自带的远程桌面组件,在打开的窗口内输入公网ip。 2.第二步:输入远程电脑的登录用户名和密码,即可成功建立连接。...
vscode中设置默认格式化工具pretter
1. 安装 Prettier 插件 打开 VSCode 的扩展市场(快捷键 CtrlShiftX 或点击左侧的扩展图标)。 搜索并安装 Prettier - Code formatter 插件。 2. 设置 VSCode 使用 Prettier 格式化代码 打开 VSCode 的设置(快捷键 Ctrl, 或点击右下角齿轮图标…...
Hadoop、Flink、Spark和Kafka
Hadoop、Flink、Spark和Kafka是大数据处理领域中的四个重要工具,它们在架构、数据处理方式以及性能等方面都存在区别。以下是具体分析: 架构 Hadoop:Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce编…...
APP自动化测试元素定位及隐式等待
元素定位是UI自动化测试中最关键的一步,假如在自动化测试中没有定位到页面中素,也就无法完成对页面的测试操作。那么,我们在自动化测试中如何定位到是要部面元素呢? 下面聊一聊用 Appium 定位元素的方式。 定位页面元素有很多种…...
Element plus 的 upload 组件实现自定义上传
Element Plus 是一个基于 Vue 3 的 UI 组件库,提供了许多常用的 UI 组件。其中,Upload 组件用于文件上传功能。如果你想实现自定义上传逻辑,可以通过 before-upload 和 http-request 属性来实现。 以下是一个简单的示例,展示如何…...

力扣-数据结构-10【算法学习day.81】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关…...
WPF的一些控件的触发事件记录
<c1:C1ComboBox Width"230" ItemsSource"{Binding ReplaceWayList}" Style"{StaticResource ListSearch-C1ComboBox}" SelectedValueChanged"C1ComboBox_SelectedValueChanged", 下拉框事件,值改变事件&a…...
C# 设计模式(创建型模式):建造者模式
C# 设计模式(创建型模式):建造者模式 引言 在软件开发中,创建型设计模式主要关注对象的创建方式,其中建造者模式(Builder Pattern)是非常重要的一种。建造者模式通过一步一步构建一个复杂对象…...

关于模板函数的void返回值的判断:std::is_void与模板特化
int返回值的函数参数测试 #include <iostream> #include <functional>int return_int_func(){std::cout << __func__ << std::endl << std::flush;return 10086; }template<class U> auto CallDeviceMethodShort(std::function<U()&g…...

重现ORA-01555 细说Oracle Undo 数据管理
1. 概述 1.1. Undo 数据应用 undo数据是: 原始的、修改之前的数据副本 是针对更改数据的每个事务处理所捕获的 至少保留到事务处理结束 用于支持: 回退操作 读取一致性查询 闪回查询、闪回事务处理和闪回表 从失败的事务处理中进行恢复 1.2. 事…...
通过blob请求后端导出文件
后端controller PostMapping("/exportPlanProject2")public void exportActive(RequestBody IfPlanListDTO plan, HttpServletResponse httpServletResponse) throws IOException {}后端service public void exportExcel2(HttpServletResponse response) throws IOEx…...

养老院小程序怎么搭建?让老年人老有所养,老有所依!
随着社会老龄化的加剧,养老服务成为一个越来越重要的话题。在这个互联网的时代,养老院也开始拥抱技术,借助小程序的便捷性来改善老年人的居住和生活体验。那么,如何搭建一个适合老年人的养老院小程序呢?本文将从实际操作的角度出…...

【2024美国数学建模AB题原文翻译】
2024 MCM 问题A:资源可用性与性别比例 虽然一些动物物种超出了通常的雄性或雌性性别范畴,但大多数物种要么是雄性要么是雌性。尽管许多物种在出生时展现出1:1的性别比例,其他物种则偏离了这个性别比例,这被称为适应性性别比例变化…...
判断旗帜是否符合ISO新标准
背景介绍 在全球化的背景下,不同国家的旗帜设计需要满足某些国际标准以便于统一化和规范化。ISO(国际标准化组织)提出了一项新规定,要求国家旗帜在设计时遵循一些规则,特别是棋盘状设计中的颜色分布规则。比如&#x…...
海量数据存储实现方案设计1-mycat版
目的 这里使用mycat为例子说明方案设计思路(仅个人学习、思考笔记)。主要尝试解决海量数据存储、动态不停机扩容问题,不再受限于单库、单表、单机等。 mycat简述 mycat 主要以中间件代理的方式,不侵入工程代码来实现分库分表&a…...

Elasticsearch检索之三:官方推荐方案search_after检索实现(golang)
Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一:使用fromsize实现分页 快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang) 1、search_after检索 在前面的文章介绍了fromsize的普通分页…...

hot100_238. 除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

软件测试基础详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “尽早的介入测试,遇到问题的解决成本就越低” 随着软件测试技术的发展,测试工作由原来单一的寻找缺陷逐渐发展成为预防缺陷,…...

MySQL 备份方案设计之准备事项
MySQL 备份方案设计之准备事项 文章目录 MySQL 备份方案设计之准备事项1.选择合适的备份工具2.其他需要考虑的因素推荐资料 1.选择合适的备份工具 工欲善其事,必先利其器。 目前市面上的 MySQL 备份工具也有很多,整理如下(仅供参考ÿ…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...