62 lines
2.7 KiB
Java
62 lines
2.7 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|