본문 바로가기

SPRING

SPRING :: LoggingAop

 

 

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());
	}
}