Senior
Het is nodig om aangepaste logging te implementeren voor alle inkomende en uitgaande verzoeken op de controllers. Hoe zou je dat doen?
sobes.tech AI
Antwoord van 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;
}
}
Такой аспект перехватывает все методы в контроллерах, логирует информацию о запросе и ответе. Можно расширить логирование, добавив заголовки, тело запроса и ответа, время выполнения и т.д.