4
4
import org .slf4j .Logger ;
5
5
import org .slf4j .LoggerFactory ;
6
6
import org .slf4j .MDC ;
7
+ import org .springframework .beans .factory .annotation .Value ;
7
8
import org .springframework .web .filter .OncePerRequestFilter ;
8
- import org .springframework .web .util .ContentCachingResponseWrapper ;
9
9
import pl .piomin .logging .util .UniqueIDGenerator ;
10
10
import pl .piomin .logging .wrapper .SpringRequestWrapper ;
11
11
import pl .piomin .logging .wrapper .SpringResponseWrapper ;
15
15
import javax .servlet .http .HttpServletRequest ;
16
16
import javax .servlet .http .HttpServletResponse ;
17
17
import java .io .IOException ;
18
+ import java .util .Optional ;
18
19
19
20
import static net .logstash .logback .argument .StructuredArguments .value ;
20
21
@@ -23,24 +24,43 @@ public class SpringLoggingFilter extends OncePerRequestFilter {
23
24
private static final Logger LOGGER = LoggerFactory .getLogger (SpringLoggingFilter .class );
24
25
private UniqueIDGenerator generator ;
25
26
27
+ @ Value ("${spring.logging.ignorePatterns:#{null}}" )
28
+ Optional <String > ignorePatterns ;
29
+ @ Value ("${spring.logging.includeHeaders:false}" )
30
+ boolean logHeaders ;
31
+
26
32
public SpringLoggingFilter (UniqueIDGenerator generator ) {
27
33
this .generator = generator ;
28
34
}
29
35
30
36
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
+ }
45
65
}
46
66
}
0 commit comments