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를 사용하면 일일이 에러 처리를 해주지 않아도 한번에 원하는 경로만 작성만으로,
한번에 에러 처리를 할 수 있다!