From 56705af25596aea4eeea541f53d53d0327b44662 Mon Sep 17 00:00:00 2001 From: Rainnny7 Date: Thu, 12 Sep 2024 16:58:14 -0400 Subject: [PATCH] add request logs to the api --- .../me/braydon/tether/log/RequestLogger.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 API/src/main/java/me/braydon/tether/log/RequestLogger.java diff --git a/API/src/main/java/me/braydon/tether/log/RequestLogger.java b/API/src/main/java/me/braydon/tether/log/RequestLogger.java new file mode 100644 index 0000000..83d8067 --- /dev/null +++ b/API/src/main/java/me/braydon/tether/log/RequestLogger.java @@ -0,0 +1,47 @@ +package me.braydon.tether.log; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; +import me.braydon.tether.common.IPUtils; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +/** + * Responsible for logging request and + * response transactions to the terminal. + * + * @author Braydon + */ +@ControllerAdvice +@Slf4j(topic = "Req/Res Transaction") +public class RequestLogger implements ResponseBodyAdvice { + @Override + public boolean supports(@NonNull MethodParameter returnType, @NonNull Class> converterType) { + return true; + } + + @Override + public Object beforeBodyWrite(Object body, @NonNull MethodParameter returnType, @NonNull MediaType selectedContentType, + @NonNull Class> selectedConverterType, + @NonNull ServerHttpRequest rawRequest, @NonNull ServerHttpResponse rawResponse) { + HttpServletRequest request = ((ServletServerHttpRequest) rawRequest).getServletRequest(); + HttpServletResponse response = ((ServletServerHttpResponse) rawResponse).getServletResponse(); + + // Get the request ip ip + String ip = IPUtils.getRealIp(request); + + log.info("%s | %s %s %s %s".formatted( + ip, request.getMethod(), request.getRequestURI(), request.getProtocol(), response.getStatus() + )); + return body; + } +} \ No newline at end of file