LayeredArchitectureLogAspect.java
package com.example.base.global.aop.logger;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Slf4j
public class LayeredArchitectureLogAspect {
private static String DEFAULT_INPUT_MESSAGE_FORMAT = "[{}] >> Input :: {} :: {}";
private static String DEFAULT_OUTPUT_MESSAGE_FORMAT = "[{}] << Output :: {} :: {}";
private static String DEFAULT_ERROR_MESSAGE_FORMAT = "[{}] {} :: {} {}";
public static void defaultTraceInputLog(JoinPoint joinPoint){
log.trace(DEFAULT_INPUT_MESSAGE_FORMAT, joinPoint.getSignature().toShortString(),
joinPoint.getArgs(),
joinPoint.getTarget().getClass());
}
public static void defaultTraceOutputLog(JoinPoint joinPoint, Object result){
log.trace(DEFAULT_OUTPUT_MESSAGE_FORMAT, joinPoint.getSignature().toShortString(),
result,
joinPoint.getTarget().getClass());
}
public static void errorLog(JoinPoint joinPoint, Throwable e){
log.error(DEFAULT_ERROR_MESSAGE_FORMAT, joinPoint.getSignature().toShortString() ,
e.getMessage(), e.getStackTrace()[0], e.getClass().getName());
}
@Aspect
@Component
public static class BaseLogAspect{
@Before("com.example.base.global.aop.PointCut.allControllerServiceRepositoryUnderBasePackage()")
public static void doBefore(JoinPoint joinPoint){
defaultTraceInputLog(joinPoint);
}
@AfterReturning(pointcut = "com.example.base.global.aop.PointCut.allControllerServiceRepositoryUnderBasePackage()", returning = "result")
public void doAfterReturning(JoinPoint joinPoint, Object result){
defaultTraceOutputLog(joinPoint, result);
}
@AfterThrowing(pointcut = "com.example.base.global.aop.PointCut.allControllerUnderBasePackage()", throwing="e")
public void doAfterThrowing(JoinPoint joinPoint, Throwable e){
errorLog(joinPoint, e);
}
}
}