Initial commit
This commit is contained in:
61
src/main/java/com/noblelift/ota/common/aspect/LogAspect.java
Normal file
61
src/main/java/com/noblelift/ota/common/aspect/LogAspect.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package com.noblelift.ota.common.aspect;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.noblelift.ota.common.annotation.Log;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@Aspect
|
||||
@Component
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class LogAspect {
|
||||
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
@Around("@annotation(logAnnotation)")
|
||||
public Object around(ProceedingJoinPoint joinPoint, Log logAnnotation) throws Throwable {
|
||||
long start = System.currentTimeMillis();
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
||||
HttpServletRequest request = requestAttributes instanceof ServletRequestAttributes servletRequestAttributes
|
||||
? servletRequestAttributes.getRequest()
|
||||
: null;
|
||||
String requestUri = request == null ? "N/A" : request.getRequestURI();
|
||||
String requestMethod = request == null ? "N/A" : request.getMethod();
|
||||
String params = serializeArgs(joinPoint.getArgs());
|
||||
String operation = logAnnotation.value().isBlank() ? signature.getMethod().getName() : logAnnotation.value();
|
||||
log.info("[API-REQUEST] operation={}, method={}, uri={}, params={}", operation, requestMethod, requestUri, params);
|
||||
try {
|
||||
Object result = joinPoint.proceed();
|
||||
log.info("[API-RESPONSE] operation={}, duration={}ms", operation, System.currentTimeMillis() - start);
|
||||
return result;
|
||||
} catch (Throwable ex) {
|
||||
log.error("[API-ERROR] operation={}, duration={}ms, message={}", operation, System.currentTimeMillis() - start, ex.getMessage(), ex);
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
private String serializeArgs(Object[] args) {
|
||||
Object[] filtered = Arrays.stream(args)
|
||||
.filter(arg -> !(arg instanceof HttpServletRequest))
|
||||
.toArray();
|
||||
try {
|
||||
return objectMapper.writeValueAsString(filtered);
|
||||
} catch (JsonProcessingException e) {
|
||||
return Arrays.toString(filtered);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user