springbootaop日志(springboot开启日志)
## Spring Boot AOP 日志### 简介在 Spring Boot 应用中,日志记录是必不可少的环节,它可以帮助我们追踪应用运行状况、诊断问题以及分析性能。而 AOP (Aspect-Oriented Programming,面向切面编程) 提供了一种优雅的方式,让我们可以将日志记录的逻辑与业务代码解耦,提高代码的可维护性和可读性。### Spring Boot AOP 日志实现#### 1. 添加依赖首先,我们需要在 `pom.xml` 文件中添加 Spring AOP 和日志相关的依赖:```xml
; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component;@Aspect @Component public class LogAspect {private final Logger logger = LoggerFactory.getLogger(this.getClass());// 定义切点@Pointcut("execution(
com.example.controller.
.
(..))")public void controllerPointcut() {}// 前置通知,在方法执行前记录日志@Before("controllerPointcut()")public void beforeLog(JoinPoint joinPoint) {logger.info("方法执行前: {}.{}", joinPoint.getTarget().getClass().getSimpleName(), joinPoint.getSignature().getName());}// 后置通知,在方法执行后记录日志@AfterReturning(pointcut = "controllerPointcut()", returning = "result")public void afterReturningLog(JoinPoint joinPoint, Object result) {logger.info("方法执行后: {}.{},返回值: {}", joinPoint.getTarget().getClass().getSimpleName(), joinPoint.getSignature().getName(), result);}// 异常通知,在方法抛出异常时记录日志@AfterThrowing(pointcut = "controllerPointcut()", throwing = "e")public void afterThrowingLog(JoinPoint joinPoint, Exception e) {logger.error("方法执行异常: {}.{},异常信息: {}", joinPoint.getTarget().getClass().getSimpleName(), joinPoint.getSignature().getName(), e.getMessage());} } ```
代码说明:
`@Aspect` 注解表明这是一个切面类。
`@Component` 注解将该类注册为 Spring Bean。
`@Pointcut` 注解定义了一个切点,这里我们使用表达式拦截 `com.example.controller` 包下所有类的所有方法。
`@Before`、`@AfterReturning` 和 `@AfterThrowing` 注解分别定义了前置通知、后置通知和异常通知,并通过 `pointcut` 属性指定了要应用这些通知的切点。
在通知方法中,我们可以使用 `JoinPoint` 对象获取方法的相关信息,例如方法名、参数列表等。#### 3. 配置日志级别最后,我们需要在 `application.properties` 或 `application.yml` 文件中配置日志级别:```properties logging.level.com.example=debug ```这里我们将 `com.example` 包下的日志级别设置为 `debug`,这意味着所有级别等于或高于 `debug` 的日志都会被输出。### 总结通过 Spring Boot AOP,我们可以轻松地实现日志记录功能,并将日志逻辑与业务代码分离,提高代码的可维护性和可读性。同时,AOP 还支持更复杂的切面定义和通知类型,可以满足各种不同的日志记录需求。
Spring Boot AOP 日志
简介在 Spring Boot 应用中,日志记录是必不可少的环节,它可以帮助我们追踪应用运行状况、诊断问题以及分析性能。而 AOP (Aspect-Oriented Programming,面向切面编程) 提供了一种优雅的方式,让我们可以将日志记录的逻辑与业务代码解耦,提高代码的可维护性和可读性。
Spring Boot AOP 日志实现
1. 添加依赖首先,我们需要在 `pom.xml` 文件中添加 Spring AOP 和日志相关的依赖:```xml
2. 创建日志切面接下来,我们创建一个切面类,用于定义切点和通知:```java import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component;@Aspect @Component public class LogAspect {private final Logger logger = LoggerFactory.getLogger(this.getClass());// 定义切点@Pointcut("execution(* com.example.controller.*.*(..))")public void controllerPointcut() {}// 前置通知,在方法执行前记录日志@Before("controllerPointcut()")public void beforeLog(JoinPoint joinPoint) {logger.info("方法执行前: {}.{}", joinPoint.getTarget().getClass().getSimpleName(), joinPoint.getSignature().getName());}// 后置通知,在方法执行后记录日志@AfterReturning(pointcut = "controllerPointcut()", returning = "result")public void afterReturningLog(JoinPoint joinPoint, Object result) {logger.info("方法执行后: {}.{},返回值: {}", joinPoint.getTarget().getClass().getSimpleName(), joinPoint.getSignature().getName(), result);}// 异常通知,在方法抛出异常时记录日志@AfterThrowing(pointcut = "controllerPointcut()", throwing = "e")public void afterThrowingLog(JoinPoint joinPoint, Exception e) {logger.error("方法执行异常: {}.{},异常信息: {}", joinPoint.getTarget().getClass().getSimpleName(), joinPoint.getSignature().getName(), e.getMessage());} } ```**代码说明:*** `@Aspect` 注解表明这是一个切面类。 * `@Component` 注解将该类注册为 Spring Bean。 * `@Pointcut` 注解定义了一个切点,这里我们使用表达式拦截 `com.example.controller` 包下所有类的所有方法。 * `@Before`、`@AfterReturning` 和 `@AfterThrowing` 注解分别定义了前置通知、后置通知和异常通知,并通过 `pointcut` 属性指定了要应用这些通知的切点。 * 在通知方法中,我们可以使用 `JoinPoint` 对象获取方法的相关信息,例如方法名、参数列表等。
3. 配置日志级别最后,我们需要在 `application.properties` 或 `application.yml` 文件中配置日志级别:```properties logging.level.com.example=debug ```这里我们将 `com.example` 包下的日志级别设置为 `debug`,这意味着所有级别等于或高于 `debug` 的日志都会被输出。
总结通过 Spring Boot AOP,我们可以轻松地实现日志记录功能,并将日志逻辑与业务代码分离,提高代码的可维护性和可读性。同时,AOP 还支持更复杂的切面定义和通知类型,可以满足各种不同的日志记录需求。