appling 프로젝트
[appling] 전역 Log 처리 (with. AOP)
studyingJuno
2024. 9. 9. 16:02
728x90
반응형
🔴 log 전역으로 처리하기
간단한 로그를 남기려고 하는데 Controller랑 Service마다 로그를 직접 찍지 않고 자동화처리 하고 싶다.
해당 부분을 Aspect(AOP)를 사용하여 처리해보자.
🟠 설정
dependencies {
...
implementation("org.springframework:spring-aop:6.0.11")
}
의존성 주입만 해주면 끝이다.
🟠 적용
🟢 Controller Log
@Component
@Aspect
@Slf4j
public class GlobalControllerLog {
@Around("execution(* com.simol.appling..*.controller..*.*(..))")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
String type = pjp.getSignature().getDeclaringTypeName();
String method = pjp.getSignature().getName();
String requestURI = ((ServletRequestAttributes) requestAttributes).getRequest()
.getRequestURI();
log.info("[appling] [controller] requestUri=[{}] package = [{}], method = [{}]",
requestURI, type, method);
return pjp.proceed();
}
}
@Around("execution(* com.simol.appling..*.controller..*.*(..))")
설정을 통해 해당 패키지의 controller에 포함된 경우에만 적용되도록 했다.
그리고 controller에서 요청된 url과 해당 controller의 package, method명을 로그로 찍도록 설정했다.
🟢 Service Log
@Aspect
@Component
@Slf4j
public class GlobalServiceLog {
@Around("execution(* com.simol.appling..*.service..*.*(..))")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
log.info("[appling] [service] method = [{}]", pjp.getSignature().toShortString());
return pjp.proceed();
}
}
@Around("execution(* com.simol.appling..*.service..*.*(..))")
설정을 통해 해당 패키지의 service가 포함된 경우에만 적용되도록 했다.
그리고 service의 method명만 찍도록 했다.
로그가 잘 찍히는 것을 확인했다. 로그를 저장하기 위해 LogBack을 설정해야되지만 아직은 필요하지 않아 나중에 설정하기로 하자!
728x90
반응형