springboot aop 日志
时间: 2025-06-11 16:04:33 浏览: 9
### Spring Boot 中使用 AOP 实现日志记录的最佳实践
在 Spring Boot 应用中,AOP 是一种非常有效的工具,可用于实现跨切关注点的功能,如日志记录、性能监控等。以下是基于最佳实践的日志记录实现方案。
#### 1. 添加必要的依赖
为了支持 Web 功能和 AOP 的使用,需要引入 `spring-boot-starter-web` 和 `spring-boot-starter-aop` 这两个依赖[^1]:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
```
#### 2. 创建自定义注解
创建一个自定义注解,用于标记需要记录日志的方法。这种方式可以让开发者更清晰地控制哪些方法会被拦截并记录日志[^3]。
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
}
```
#### 3. 定义切面类
通过切面类捕获带有 `@Loggable` 注解的方法,并在其执行前、后或其他阶段插入日志记录逻辑。这里展示了如何利用前置通知、后置通知以及异常通知来完成完整的日志记录功能[^4]。
```java
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
// 切入点表达式,匹配所有标注了 @Loggable 的方法
@Pointcut("@annotation(com.example.demo.Loggable)")
public void loggableMethods() {}
// 前置通知:在方法执行前打印进入信息
@Before("loggableMethods()")
public void beforeAdvice() {
logger.info("Entering method...");
}
// 后置返回通知:在方法成功完成后打印退出信息
@AfterReturning(pointcut = "loggableMethods()", returning = "result")
public void afterReturningAdvice(Object result) {
logger.info("Method executed successfully with result: {}", result);
}
// 异常通知:在方法抛出异常时打印错误信息
@AfterThrowing(pointcut = "loggableMethods()", throwing = "ex")
public void afterThrowingAdvice(Exception ex) {
logger.error("Exception occurred in method execution", ex);
}
}
```
#### 4. 测试控制器中的应用
在任意 Controller 方法上添加 `@Loggable` 注解即可启用该方法的日志记录功能。
```java
@RestController
@RequestMapping("/api/example")
public class ExampleController {
@GetMapping("/test")
@Loggable
public String testLogging() {
return "This is a logged response.";
}
}
```
---
###
阅读全文
相关推荐


















