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

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("请求方法:{}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码客日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值