Sobes.tech
Назад к вопросам
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;
    }
}

Такой аспект перехватывает все методы в контроллерах, логирует информацию о запросе и ответе. Можно расширить логирование, добавив заголовки, тело запроса и ответа, время выполнения и т.д.