LoggingAop
AOP(Aspect-Oriented Programming)를 활용하여 특정 서비스 메소드 호출 시점에 로깅을 처리하는 LoggingAop 클래스. 주로 메소드 호출 전/후, 예외 발생 시에 관련된 정보를 자동으로 로깅하는 역할을 한다. 메소드에서 예외가 발생하면 예외 메시지와 발생한 메소드의 이름을 기록하여 디버깅을 쉽게 도와준다.
package com.rcp.rfg.comm;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Slf4j
//@Aspect: 이 클래스가 AOP 기능을 수행하는 Aspect임을 나타냄
@Aspect
@Component
public class LoggingAop {
//@Pointcut: AOP에서 특정 메소드나 클래스가 실행될 때 트리거할 지점을 정의
@Pointcut(value = "execution(public * com.rcp.rfg.jpa.service.*Service*.*(..))")
//pointCut(): 위의 포인트컷 표현식을 묶어두기 위한 메소드
public void pointCut() {}
//@Before("pointCut()"): 포인트컷에서 지정한 메소드가 호출되기 전에 실행
@Before("pointCut()")
public void before(JoinPoint joinPoint) {
log.info("[AOP Logging]Start Method: {}", joinPoint.getSignature().getName());
//joinPoint.getArgs(): 호출된 메소드의 매개변수를 배열로 가져옴
Object[] obj = joinPoint.getArgs();
if(obj != null) {
//Arrays.toString(obj): 메소드에 전달된 매개변수를 문자열로 변환하여 출력
log.info("[AOP Logging] Arguments: {}", Arrays.toString(obj));
}
}
//@AfterReturning: 포인트컷에서 지정한 메소드가 정상적으로 종료된 후에 실행
//정상적으로 실행된 메소드가 반환하는 값을 returnValue로 받아옴
@AfterReturning(pointcut = "pointCut()", returning = "returnValue")
public void afterReturning(JoinPoint joinPoint, Object returnValue) {
//메소드 실행 후 반환값을 로그로 남김
log.info("[AOP Logging] ResultValue: {}",returnValue);
}
//포인트컷에서 지정한 메소드가 예외를 발생시킨 후에 실행
//발생한 예외 객체를 error로 받아옴
@AfterThrowing(pointcut = "pointCut()", throwing = "error")
public void afterThrowing(JoinPoint joinPoint, Exception error) {
//예외가 발생한 메소드의 이름을 로그로 출력
log.info("[AOP Logging] Exception Method: {}", joinPoint.getSignature().getName());
//발생한 예외의 메시지를 로그로 출력
log.info("[AOP Logging] Error Message: {}", error.getMessage());
}
}
'SPRING' 카테고리의 다른 글
SPRING :: LoggingFilter 접속 로그 필터 구현 (0) | 2024.10.08 |
---|---|
SPRING :: 파일 업로드 File Upload (0) | 2024.09.02 |
RestTemplate :: HTTP (REST)요청/응답 클래스 (0) | 2024.09.01 |
SPRING :: Security 로그인 구현 03 React 화면 구성 (0) | 2024.08.18 |
SPRING :: Security 로그인 구현 02 SecurityConfig (0) | 2024.08.18 |