Spring Boot 接口日志统一打印方案

Spring Boot日志文件 ❤️❤️❤️Spring + Spring MVC + MyBatis_冷兮雪的博客-优快云博客前篇我们 讲完了SpringBoot的配置文件,讲解了 为什么学配置文件&配置文件的作用,还有两种配置文件的格式与使用。这篇来讲SpringBoot 日志文件,下面我们一起进入SpringBoot 日志文件的世界!一、日志的作用⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇。 阅读详情

Spring Boot 接口日志统一打印方案

项目开发阶段,我们可通过调试工具实时查看接口请求与响应信息,但项目上线后,调试工具无法直接使用,日志就成为排查接口问题、定位异常原因的核心依据。如果日志打印不规范——比如请求参数缺失、响应结果不完整、无接口耗时统计,会导致排查问题时效率低下,甚至无法定位问题根源。本文将针对这一痛点,提供一套Spring Boot接口日志统一打印方案,通过AOP拦截请求、规范日志级别、配置日志按天分割,实现接口日志的标准化、可追溯,大幅提升线上问题排查效率。

本方案无需侵入业务代码,通过AOP切面统一拦截所有接口请求,自动打印请求URL、请求方法、请求参数、响应结果、接口耗时等关键信息;同时配置合理的日志级别,避免无效日志冗余;再通过日志按天分割,解决单个日志文件过大、难以查阅的问题,完全适配线上项目的日志管理需求。

一、核心依赖准备(极简配置,无需额外引入过多依赖)

Spring Boot默认集成了Spring AOP和SLF4J+Logback日志框架,无需手动引入AOP和日志核心依赖,仅需确保项目中存在Spring Web依赖(接口开发基础),若项目为纯后端接口项目,已有的依赖即可满足需求。

若项目中缺失相关依赖(如低版本Spring Boot),可手动引入以下依赖,确保AOP和日志功能正常生效:

<!-- Spring AOP 依赖(低版本Spring Boot需手动引入) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- 日志框架依赖(Spring Boot默认集成,无需重复引入,此处仅作参考) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

注意:Spring Boot 2.x及以上版本均默认集成上述依赖,无需手动添加;若引入后出现依赖冲突,可排除项目中重复的AOP或日志相关依赖,确保依赖版本与Spring Boot版本匹配。

二、AOP 拦截请求:统一打印核心日志信息

核心思路:通过AOP切面,拦截所有Controller层的接口请求,在请求进入接口前打印请求相关信息(URL、请求方法、请求参数),在接口执行完成后打印响应结果和接口耗时,实现日志的统一打印,无需在每个接口中手动编写日志打印代码,避免代码冗余。

此处采用@Around环绕通知,既能在请求前执行,也能在请求后执行,便于统计接口耗时;同时通过切入点表达式,精准拦截Controller层的所有接口,避免拦截非接口方法(如Service层、工具类方法)。

2.1 编写AOP切面类(核心代码,无导包可直接复制)

// AOP接口日志切面类:统一拦截接口请求,打印日志
@Aspect
@Component
@Slf4j // Lombok注解,简化日志打印(无需手动创建Logger对象)
public class InterfaceLogAspect {
   
   

    // 切入点表达式:拦截所有Controller层的接口(com.example.controller为你的Controller包路径)
    @Pointcut("execution(* com.example.controller..*.*(..))")
    public void interfaceLogPointcut() {
   
   }

    // 环绕通知:在接口执行前后打印日志,统计接口耗时
    @Around("interfaceLogPointcut()")
    public Object aroundInterface(ProceedingJoinPoint joinPoint) throws Throwable {
   
   
        // 1. 请求前:打印请求相关信息
        long startTime = System.currentTimeMillis(); // 记录请求开始时间
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        // 打印请求URL、请求方法、请求IP、类方法
        log.info("===================================== 接口请求开始 =====================================");
        log.info("请求URL:{}", request.getRequestURI());
        log.info("请求方法:{}"
SpringBoot 整合ApiBoot Logging 实现监控打印接口的请求日志 在日常做项目里,不管是本地调试阶段还是线上正式部署运行阶段, 我们常常需要对接口的被调用做一些参数打印,为了更清晰地去联调以及确认数据。 实现这种场景,无疑第一时间想到的就是aop,配合注解的方式使用,这样确实是个好办法,而且还能更加自由地去监控打印请求接口日志,甚至还能加上一些逻辑校验等。 还有一种就是最普通的,用map接收参数,在每个接口都打印下map。 那么这篇教程里面,介绍的是新的一种方案... 阅读详情

相关推荐

springboot利用拦截器打印各个接口的响应时间.rar

springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

总目录在这哦~ https://blog.youkuaiyun.com/z123canghai/article/details/107700878 第六章 接收端结构及功能说明 子目录 6.1 RX的模拟前端 6.2 RX的OOB信号 6.3 RX的均衡器 6.4 RX的CDR 时钟数据恢复 6.5 RX时钟输出结构 6.6 RX 的极性控制 6.7 RX 的PRBS 6.8 Rx字节、字的对齐功能 6.9 Rx接收弹性缓冲区 6.10 Rx的时钟纠正 6.11 Rx接收通道绑定 6...

滄海的博客 1万+

Win10平台下QT6.9.0 OpenCV 4.10.0从入门到精通

我最近开发一个视觉项目,我们从0开始记录在windows 10下 用QT6.9+OpenCV 4.10.0搞定整个项目的开发过程。以抛砖引玉,大家共同进步。

fds111111的博客 1711

SQL注入:联合查询的三个绕过技巧

在SQL注入中,可以利用科学计数法来绕过对输入的限制。例如,可以使用科学计数法来绕过对字符串长度的限制,通过将字符串拆分成多个部分并使用科学计数法来表示。此外,还可以利用数据库的特定特性或语法来替代原始的查询语句,从而执行联合查询或其他恶意操作。另外,还可以尝试利用无列名注入的技巧,通过在原始查询中使用通配符或其他方式来绕过对列名的限制,从而执行恶意操作。

qq_68163788的博客 3792

家庭宽带IPv6避坑指南:如何通过DHCPv6-PD获取公网地址(附OpenWRT配置)

本文详细解析了家庭宽带IPv6的地址分配机制,重点介绍了通过DHCPv6-PD获取公网地址的方法,并提供了OpenWRT路由器的具体配置步骤。从路由器通告(RA)标记位到前缀委派(PD)流程,帮助用户解决IPv6部署中的常见问题,实现稳定高效的IPv6网络连接。

backprop5master的博客 1174

【顾邦小讲堂】第二十四期 电源环路测试从入门到精髓:一文掌握环路测试原理与电压注入点选择依据

电源环路测试是评估开关电源、线性电源等闭环系统稳定性的核心手段,直接关系到电源的稳定性、输出精度、动态响应、抗干扰能力甚至可靠性

GBupupup的博客 2110

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1917

损失函数大汇总(八)(IoU Loss附公式推导与代码)

本文详细介绍了IoU Loss及其在图像分割中的应用。IoU(交并比)是衡量预测区域与真实区域重叠程度的指标,IoU Loss定义为1-IoU,直接优化区域重叠质量。文章推导了IoU的数学表达式和梯度计算,分析了其函数特性:全局耦合梯度、对漏检误检的双重惩罚、适合类别不平衡任务。与Dice Loss相比,IoU更强调覆盖质量而非相似度。实际应用中IoU Loss常与BCE组合使用,前者保证训练稳定性,后者优化整体区域质量。文章还提供了IoU Loss的代码实现,适用于二值分割、小目标提取等场景,特别当任务评

悦学共鸣,温柔以待,汇聚光芒,共同成长 413

手把手教你学simulink(69.3)--毫米波5G/6G 系统场景实例设计并实现基于Simulink的毫米波多用户MIMO通信系统模型

毫米波频段(30 GHz到300 GHz)因其高带宽和高速率特性,成为5G和未来6G通信系统的理想选择。然而,毫米波信号的传播特性较差,容易受到大气吸收、雨衰、建筑物遮挡等因素的影响。为了克服这些挑战并提高通信容量,多用户MIMO(MU-MIMO, Multi-User Multiple-Input Multiple-Output)技术被广泛应用。多用户MIMO技术通过在基站和多个用户之间同时传输多个数据流,充分利用空间资源,从而显著提升系统容量和频谱效率。

MHD0815的博客 490

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Spring Boot 参数校验全局处理(JSR380 + 自定义校验)
下一篇: 零基础转行开发:从入门到斩获大厂Offer的系统化成长指南
码客日记
博客等级 码龄6年 149粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码客日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值