Spring Boot AOP日志打印实现

发布于:2025-02-11 ⋅ 阅读:(78) ⋅ 点赞:(0)

在 Spring Boot 3.1.12 中使用 AOP 实现日志打印,记录前端传入的参数和后端返回的数据,可以按照以下步骤进行:

  1. 添加依赖
    首先,确保你的 pom.xml 文件中包含了 Spring AOP 的依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 创建切面类
    接下来,创建一个切面类,使用 @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);
    }
}
  1. 配置日志级别
    确保你的 application.properties 或 application.yml 文件中配置了适当的日志级别,以便能够看到日志输出。

application.properties

logging.level.com.example.demo=DEBUG
  1. 测试
    启动你的 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
  1. 进一步优化
    你可以根据需要进一步优化切面,例如:
  • 只记录特定注解标记的方法。

  • 记录异常信息。

  • 使用 @Around 注解来更灵活地控制方法的执行和日志记录。

通过这些步骤,你可以轻松地在 Spring Boot 3.1.12 中使用 AOP 实现日志打印,记录前端传入的参数和后端返回的数据。


网站公告

今日签到

点亮在社区的每一天
去签到