AOP(Aspect Oriented 프로그래밍)는 비즈니스 코드와 기술 코드를 분리할 수 있는 프로그래밍 패러다임입니다. 이 패러다임은 많은 개발자들에 의해 다소 무시되고 있지만 매우 강력한 도구입니다.
이 튜토리얼에서는 스프링 부트 3을 사용하여 서비스를 로깅하는 데 이 패러다임을 적용하려고 합니다.
전제조건
추가할 종속성
<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> <version>3.2.3</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
LoggingAspect.java
이 클래스에는 로깅을 위한 AOP가 포함됩니다.
package dev.tuxbe.democonfig.contracts; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.annotation.*; import org.aspectj.lang.JoinPoint; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Aspect @Component @Slf4j public class LoggingAspect { @Pointcut("execution(* dev.tuxbe.democonfig.services.*.*(..))") public void serviceMethods() { } @Before("serviceMethods()") public void logBeforeServiceMethods(JoinPoint joinpoint) { String name = joinpoint.getSignature().getName(); log.info("Début de traitement de la method {} avec pour parametre {}", name, joinpoint.getArgs()); } @AfterReturning(value = "serviceMethods()", returning = "proceed") public void logAfterReturningServiceMethods(JoinPoint joinpoint, Object proceed) { String methodName = joinpoint.getSignature().getName(); Object[] args = joinpoint.getArgs(); // Logiquement, si nous atteignons ce point, le traitement s'est bien terminé log.info("Méthode {} exécutée avec succès avec les arguments {}", methodName, args); log.info("Résultat : {}", proceed); } @AfterThrowing(pointcut = "serviceMethods()", throwing = "ex") public void logAfterThrowingServiceMethods(JoinPoint joinPoint, Throwable ex) { String methodName = joinPoint.getSignature().getName(); Object[] args = joinPoint.getArgs(); // Récupérer la requête HTTP HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); String uri = request.getRequestURI(); String method = request.getMethod(); // Logiquement, si nous atteignons ce point, une exception a été levée pendant l'exécution de la méthode log.info("{} : {} exécutée avec echec avec les arguments {}",method, uri, args); log.info("Message d'error : {}", ex.getMessage()); } }
이 로깅 기술은 유지 관리가 가능하고 깔끔한 코드를 유지하는 데 도움이 됩니까?
위 내용은 로깅을 위한 Spring AOP의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!