Назад к вопросам
СБЕР
Senior
4
Необходимо реализовать кастомное логирование на все входящие и исходящие запросы на контроллеры. Как бы вы это реализовали?
Компании, где спрашивали
Ответ от нейросети
sobes.tech 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;
}
}
Такой аспект перехватывает все методы в контроллерах, логирует информацию о запросе и ответе. Можно расширить логирование, добавив заголовки, тело запроса и ответа, время выполнения и т.д.