Senior
Es ist notwendig, eine benutzerdefinierte Protokollierung für alle eingehenden und ausgehenden Anfragen an die Controller zu implementieren. Wie würden Sie das umsetzen?
sobes.tech KI
Antwort von AI
Для реализации кастомного логирования всех входящих и исходящих запросов на контроллеры в Java можно использовать аспектно-ориентированное программирование (AOP) с помощью Spring AOP или AspectJ.
Пример с использованием Spring AOP:
@Aspect
@Component
public class LoggingAspect {
@Pointcut("within(@org.springframework.web.bind.annotation.RestController *)")
public void controllerMethods() {}
@Around("controllerMethods()")
public Object logRequests(ProceedingJoinPoint joinPoint) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
// Логирование входящего запроса
System.out.println("Incoming request: " + request.getMethod() + " " + request.getRequestURI());
Object response = joinPoint.proceed();
// Логирование исходящего ответа
System.out.println("Outgoing response: " + response);
return response;
}
}
Такой аспект перехватывает все методы в контроллерах, логирует информацию о запросе и ответе. Можно расширить логирование, добавив заголовки, тело запроса и ответа, время выполнения и т.д.