http://jira.mfd.msk:8088/browse/BKI-3215 Added reqParams to HttpLoggingFilter
This commit is contained in:
parent
ea12395559
commit
dc89f17761
1 changed files with 39 additions and 31 deletions
|
|
@ -4,6 +4,7 @@ import jakarta.servlet.FilterChain;
|
|||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.Part;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
|
@ -13,7 +14,6 @@ import org.springframework.web.util.ContentCachingRequestWrapper;
|
|||
import org.springframework.web.util.ContentCachingResponseWrapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
|||
protected boolean shouldNotFilter(HttpServletRequest request) {
|
||||
String path = request.getRequestURI();
|
||||
return path.startsWith("/actuator/health") || path.startsWith("/swagger")
|
||||
|| path.startsWith("/v3/api-docs") || path.startsWith("/static/");
|
||||
|| path.startsWith("/v3/api-docs") || path.startsWith("/static/") || path.equals("/");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -53,8 +53,7 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
|||
} finally {
|
||||
long tookMs = (System.nanoTime() - startNs) / 1_000_000;
|
||||
|
||||
String requestBody = readBody(req.getContentAsByteArray(), req.getCharacterEncoding());
|
||||
String responseBody = readBody(resp.getContentAsByteArray(), resp.getCharacterEncoding());
|
||||
Map<String, String> reqParams = paramsMap(req);
|
||||
|
||||
Map<String, String> reqHeaders = headersMap(req);
|
||||
Map<String, String> respHeaders = headersMap(resp);
|
||||
|
|
@ -63,7 +62,7 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
|||
mask(respHeaders);
|
||||
|
||||
log.info(
|
||||
"HTTP (RESPONSE) {} {}{} | status={} | took={}ms | cid={} | reqHeaders={} | reqBody={} | respHeaders={} | respBody={}",
|
||||
"HTTP (RESPONSE) {} {}{} | status={} | took={}ms | cid={} | reqHeaders={} | reqParams={} | respHeaders={}",
|
||||
req.getMethod(),
|
||||
req.getRequestURI(),
|
||||
req.getQueryString() == null ? "" : "?" + req.getQueryString(),
|
||||
|
|
@ -71,9 +70,8 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
|||
tookMs,
|
||||
correlationId,
|
||||
reqHeaders,
|
||||
requestBody,
|
||||
respHeaders,
|
||||
responseBody
|
||||
reqParams,
|
||||
respHeaders
|
||||
);
|
||||
|
||||
resp.copyBodyToResponse();
|
||||
|
|
@ -82,19 +80,19 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
|||
|
||||
|
||||
private void logIncomingRequest(ContentCachingRequestWrapper req, String correlationId) {
|
||||
String requestBody = readBody(req.getContentAsByteArray(), req.getCharacterEncoding());
|
||||
Map<String, String> reqParams = paramsMap(req);
|
||||
|
||||
Map<String, String> reqHeaders = headersMap(req);
|
||||
mask(reqHeaders);
|
||||
|
||||
log.info(
|
||||
"HTTP (REQUEST) {} {}{} | cid={} | reqHeaders={} | reqBody={}",
|
||||
"HTTP (REQUEST) {} {}{} | cid={} | reqHeaders={} | reqParams={}",
|
||||
req.getMethod(),
|
||||
req.getRequestURI(),
|
||||
req.getQueryString() == null ? "" : "?" + req.getQueryString(),
|
||||
correlationId,
|
||||
reqHeaders,
|
||||
requestBody
|
||||
reqParams
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -102,19 +100,29 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
|||
return (request instanceof ContentCachingRequestWrapper c) ? c : new ContentCachingRequestWrapper(request, MAX_BODY);
|
||||
}
|
||||
|
||||
private static String readBody(byte[] buf, String encoding) {
|
||||
if (buf == null || buf.length == 0) return "";
|
||||
var bytes = buf.length > MAX_BODY ? Arrays.copyOf(buf, MAX_BODY) : buf;
|
||||
String body = new String(bytes, encoding != null ? java.nio.charset.Charset.forName(encoding) : StandardCharsets.UTF_8);
|
||||
if (buf.length > MAX_BODY) body += "…[truncated]";
|
||||
return body;
|
||||
}
|
||||
|
||||
private static Map<String, String> headersMap(HttpServletRequest req) {
|
||||
return Collections.list(req.getHeaderNames()).stream()
|
||||
.collect(Collectors.toMap(h -> h, req::getHeader, (a, b) -> a, LinkedHashMap::new));
|
||||
}
|
||||
|
||||
private Map<String, String> paramsMap(ContentCachingRequestWrapper req) {
|
||||
Map<String, String> paramsMap = new LinkedHashMap<>();
|
||||
req.getParameterMap().forEach((k, v) -> {
|
||||
String params = String.join(", ", v);
|
||||
paramsMap.put(k, params);
|
||||
});
|
||||
|
||||
try {
|
||||
Collection<Part> fileParts = req.getParts();
|
||||
fileParts.forEach(part -> {
|
||||
paramsMap.put(part.getName(), part.getSubmittedFileName());
|
||||
});
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
return paramsMap;
|
||||
}
|
||||
|
||||
private static Map<String, String> headersMap(HttpServletResponse resp) {
|
||||
return resp.getHeaderNames().stream()
|
||||
.collect(Collectors.toMap(h -> h, resp::getHeader, (a, b) -> a, LinkedHashMap::new));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue