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.ServletException;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import jakarta.servlet.http.Part;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
@ -13,7 +14,6 @@ import org.springframework.web.util.ContentCachingRequestWrapper;
|
||||||
import org.springframework.web.util.ContentCachingResponseWrapper;
|
import org.springframework.web.util.ContentCachingResponseWrapper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
||||||
protected boolean shouldNotFilter(HttpServletRequest request) {
|
protected boolean shouldNotFilter(HttpServletRequest request) {
|
||||||
String path = request.getRequestURI();
|
String path = request.getRequestURI();
|
||||||
return path.startsWith("/actuator/health") || path.startsWith("/swagger")
|
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
|
@Override
|
||||||
|
|
@ -53,8 +53,7 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
||||||
} finally {
|
} finally {
|
||||||
long tookMs = (System.nanoTime() - startNs) / 1_000_000;
|
long tookMs = (System.nanoTime() - startNs) / 1_000_000;
|
||||||
|
|
||||||
String requestBody = readBody(req.getContentAsByteArray(), req.getCharacterEncoding());
|
Map<String, String> reqParams = paramsMap(req);
|
||||||
String responseBody = readBody(resp.getContentAsByteArray(), resp.getCharacterEncoding());
|
|
||||||
|
|
||||||
Map<String, String> reqHeaders = headersMap(req);
|
Map<String, String> reqHeaders = headersMap(req);
|
||||||
Map<String, String> respHeaders = headersMap(resp);
|
Map<String, String> respHeaders = headersMap(resp);
|
||||||
|
|
@ -63,7 +62,7 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
||||||
mask(respHeaders);
|
mask(respHeaders);
|
||||||
|
|
||||||
log.info(
|
log.info(
|
||||||
"HTTP (RESPONSE) {} {}{} | status={} | took={}ms | cid={} | reqHeaders={} | reqBody={} | respHeaders={} | respBody={}",
|
"HTTP (RESPONSE) {} {}{} | status={} | took={}ms | cid={} | reqHeaders={} | reqParams={} | respHeaders={}",
|
||||||
req.getMethod(),
|
req.getMethod(),
|
||||||
req.getRequestURI(),
|
req.getRequestURI(),
|
||||||
req.getQueryString() == null ? "" : "?" + req.getQueryString(),
|
req.getQueryString() == null ? "" : "?" + req.getQueryString(),
|
||||||
|
|
@ -71,9 +70,8 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
||||||
tookMs,
|
tookMs,
|
||||||
correlationId,
|
correlationId,
|
||||||
reqHeaders,
|
reqHeaders,
|
||||||
requestBody,
|
reqParams,
|
||||||
respHeaders,
|
respHeaders
|
||||||
responseBody
|
|
||||||
);
|
);
|
||||||
|
|
||||||
resp.copyBodyToResponse();
|
resp.copyBodyToResponse();
|
||||||
|
|
@ -82,19 +80,19 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
||||||
|
|
||||||
|
|
||||||
private void logIncomingRequest(ContentCachingRequestWrapper req, String correlationId) {
|
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);
|
Map<String, String> reqHeaders = headersMap(req);
|
||||||
mask(reqHeaders);
|
mask(reqHeaders);
|
||||||
|
|
||||||
log.info(
|
log.info(
|
||||||
"HTTP (REQUEST) {} {}{} | cid={} | reqHeaders={} | reqBody={}",
|
"HTTP (REQUEST) {} {}{} | cid={} | reqHeaders={} | reqParams={}",
|
||||||
req.getMethod(),
|
req.getMethod(),
|
||||||
req.getRequestURI(),
|
req.getRequestURI(),
|
||||||
req.getQueryString() == null ? "" : "?" + req.getQueryString(),
|
req.getQueryString() == null ? "" : "?" + req.getQueryString(),
|
||||||
correlationId,
|
correlationId,
|
||||||
reqHeaders,
|
reqHeaders,
|
||||||
requestBody
|
reqParams
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -102,19 +100,29 @@ public class HttpLoggingFilter extends OncePerRequestFilter {
|
||||||
return (request instanceof ContentCachingRequestWrapper c) ? c : new ContentCachingRequestWrapper(request, MAX_BODY);
|
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) {
|
private static Map<String, String> headersMap(HttpServletRequest req) {
|
||||||
return Collections.list(req.getHeaderNames()).stream()
|
return Collections.list(req.getHeaderNames()).stream()
|
||||||
.collect(Collectors.toMap(h -> h, req::getHeader, (a, b) -> a, LinkedHashMap::new));
|
.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) {
|
private static Map<String, String> headersMap(HttpServletResponse resp) {
|
||||||
return resp.getHeaderNames().stream()
|
return resp.getHeaderNames().stream()
|
||||||
.collect(Collectors.toMap(h -> h, resp::getHeader, (a, b) -> a, LinkedHashMap::new));
|
.collect(Collectors.toMap(h -> h, resp::getHeader, (a, b) -> a, LinkedHashMap::new));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue