Back-end/java

AOP를 사용하여 에러 로그 찍기

Nellie Kim 2023. 9. 26. 13:43
728x90

앞의 두 글에 심화된 내용이다.

 

설정은 그대로 하고, 

 

package com.example.first.aop;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Slf4j
@RequiredArgsConstructor
public class LogAopComponent {

    // HomeController의 모든 메서드에서 에러가 발생할 때, 에러 메시지가 로그로 찍힘
    @AfterThrowing(pointcut = "execution(* com.example.first.controller.*(..))", throwing = "ex")
    public void logError(Exception ex) {
        log.error("에러 발생: " + ex.getMessage());
    }
}

모든 컨트롤러에 에러가 발생하면 에러로그를 찍고 싶다면, 위와 같이 작성한다.

 

일일이 컨트롤러 하나하나, 메소드 하나하나에 에러 처리를 지정해주지 않아도 된다.

 

@AfterThrowing() 안에 원하는 경로 및 클래스를 지정해주고,

원하는 행위를 적어주면 된다.

 

나는 간단하게 에러가 발생 시, 다른 처리 없이 로그만 찍어주기로 했다. 

 

로그인 시 , 비밀번호를 다르게 작성했다. 

 

익셉션 처리를 따로 하지 않아 바로 에러가 터진다. 

 

로깅 설정도 해주었기 때문에 로깅 파일에도 잘 저장이 된다. 

 

 

이렇게 AOP를 사용하면 일일이 에러 처리를 해주지 않아도 한번에 원하는 경로만 작성만으로,

한번에 에러 처리를 할 수 있다!