Skip to content

Commit 5912b5d

Browse files
author
minkowp
committed
adding headers to log
1 parent 7de8a41 commit 5912b5d

File tree

4 files changed

+52
-16
lines changed

4 files changed

+52
-16
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>pl.piomin</groupId>
88
<artifactId>spring-boot-logging</artifactId>
9-
<version>1.1.0.RELEASE</version>
9+
<version>1.1-SNAPSHOT</version>
1010

1111
<properties>
1212
<java.version>11</java.version>

src/main/java/pl/piomin/logging/filter/SpringLoggingFilter.java

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
66
import org.slf4j.MDC;
7+
import org.springframework.beans.factory.annotation.Value;
78
import org.springframework.web.filter.OncePerRequestFilter;
8-
import org.springframework.web.util.ContentCachingResponseWrapper;
99
import pl.piomin.logging.util.UniqueIDGenerator;
1010
import pl.piomin.logging.wrapper.SpringRequestWrapper;
1111
import pl.piomin.logging.wrapper.SpringResponseWrapper;
@@ -15,6 +15,7 @@
1515
import javax.servlet.http.HttpServletRequest;
1616
import javax.servlet.http.HttpServletResponse;
1717
import java.io.IOException;
18+
import java.util.Optional;
1819

1920
import static net.logstash.logback.argument.StructuredArguments.value;
2021

@@ -23,24 +24,43 @@ public class SpringLoggingFilter extends OncePerRequestFilter {
2324
private static final Logger LOGGER = LoggerFactory.getLogger(SpringLoggingFilter.class);
2425
private UniqueIDGenerator generator;
2526

27+
@Value("${spring.logging.ignorePatterns:#{null}}")
28+
Optional<String> ignorePatterns;
29+
@Value("${spring.logging.includeHeaders:false}")
30+
boolean logHeaders;
31+
2632
public SpringLoggingFilter(UniqueIDGenerator generator) {
2733
this.generator = generator;
2834
}
2935

3036
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
31-
generator.generateAndSetMDC(request);
32-
final long startTime = System.currentTimeMillis();
33-
final SpringRequestWrapper wrappedRequest = new SpringRequestWrapper(request);
34-
LOGGER.info("Request: method={}, uri={}, payload={}", wrappedRequest.getMethod(),
35-
wrappedRequest.getRequestURI(), IOUtils.toString(wrappedRequest.getInputStream(),
36-
wrappedRequest.getCharacterEncoding()));
37-
final SpringResponseWrapper wrappedResponse = new SpringResponseWrapper(response);
38-
wrappedResponse.setHeader("X-Request-ID", MDC.get("X-Request-ID"));
39-
wrappedResponse.setHeader("X-Correlation-ID", MDC.get("X-Correlation-ID"));
40-
chain.doFilter(wrappedRequest, wrappedResponse);
41-
final long duration = System.currentTimeMillis() - startTime;
42-
LOGGER.info("Response({} ms): status={}, payload={}", value("X-Response-Time", duration),
43-
value("X-Response-Status", wrappedResponse.getStatus()),
44-
IOUtils.toString(wrappedResponse.getContentAsByteArray(), wrappedResponse.getCharacterEncoding()));
37+
if (ignorePatterns.isPresent() && request.getRequestURI().matches(ignorePatterns.get())) {
38+
chain.doFilter(request, response);
39+
} else {
40+
generator.generateAndSetMDC(request);
41+
final long startTime = System.currentTimeMillis();
42+
final SpringRequestWrapper wrappedRequest = new SpringRequestWrapper(request);
43+
if (logHeaders)
44+
LOGGER.info("Request: method={}, uri={}, payload={}, headers={}", wrappedRequest.getMethod(),
45+
wrappedRequest.getRequestURI(), IOUtils.toString(wrappedRequest.getInputStream(),
46+
wrappedRequest.getCharacterEncoding()), wrappedRequest.getAllHeaders());
47+
else
48+
LOGGER.info("Request: method={}, uri={}, payload={}", wrappedRequest.getMethod(),
49+
wrappedRequest.getRequestURI(), IOUtils.toString(wrappedRequest.getInputStream(),
50+
wrappedRequest.getCharacterEncoding()));
51+
final SpringResponseWrapper wrappedResponse = new SpringResponseWrapper(response);
52+
wrappedResponse.setHeader("X-Request-ID", MDC.get("X-Request-ID"));
53+
wrappedResponse.setHeader("X-Correlation-ID", MDC.get("X-Correlation-ID"));
54+
chain.doFilter(wrappedRequest, wrappedResponse);
55+
final long duration = System.currentTimeMillis() - startTime;
56+
if (logHeaders)
57+
LOGGER.info("Response({} ms): status={}, payload={}, headers={}", value("X-Response-Time", duration),
58+
value("X-Response-Status", wrappedResponse.getStatus()), IOUtils.toString(wrappedResponse.getContentAsByteArray(),
59+
wrappedResponse.getCharacterEncoding()), wrappedResponse.getAllHeaders());
60+
else
61+
LOGGER.info("Response({} ms): status={}, payload={}", value("X-Response-Time", duration),
62+
value("X-Response-Status", wrappedResponse.getStatus()),
63+
IOUtils.toString(wrappedResponse.getContentAsByteArray(), wrappedResponse.getCharacterEncoding()));
64+
}
4565
}
4666
}

src/main/java/pl/piomin/logging/wrapper/SpringRequestWrapper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import javax.servlet.http.HttpServletRequestWrapper;
99
import java.io.ByteArrayInputStream;
1010
import java.io.IOException;
11+
import java.util.HashMap;
12+
import java.util.Map;
1113

1214
public class SpringRequestWrapper extends HttpServletRequestWrapper {
1315

@@ -45,4 +47,10 @@ public int read() throws IOException {
4547
}
4648
};
4749
}
50+
51+
public Map<String, String> getAllHeaders() {
52+
final Map<String, String> headers = new HashMap<>();
53+
getHeaderNames().asIterator().forEachRemaining(it -> headers.put(it, getHeader(it)));
54+
return headers;
55+
}
4856
}

src/main/java/pl/piomin/logging/wrapper/SpringResponseWrapper.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.IOException;
44
import java.io.OutputStreamWriter;
55
import java.io.PrintWriter;
6+
import java.util.HashMap;
7+
import java.util.Map;
68

79
import javax.servlet.ServletOutputStream;
810
import javax.servlet.http.HttpServletResponse;
@@ -65,4 +67,10 @@ public byte[] getContentAsByteArray() {
6567
}
6668
}
6769

70+
public Map<String, String> getAllHeaders() {
71+
final Map<String, String> headers = new HashMap<>();
72+
getHeaderNames().forEach(it -> headers.put(it, getHeader(it)));
73+
return headers;
74+
}
75+
6876
}

0 commit comments

Comments
 (0)