33import jakarta .servlet .http .HttpServletRequest ;
44import jakarta .servlet .http .HttpServletResponse ;
55import lombok .extern .slf4j .Slf4j ;
6+ import org .springframework .http .HttpStatusCode ;
67import org .springframework .web .servlet .HandlerInterceptor ;
78import org .springframework .web .servlet .ModelAndView ;
89
10+ import java .io .IOException ;
11+ import java .util .Enumeration ;
12+ import java .util .HashMap ;
13+ import java .util .Map ;
14+ import java .util .stream .Collectors ;
15+
916@ Slf4j
1017public class LogHandlerInterceptor implements HandlerInterceptor {
1118
1219 @ Override
1320 public boolean preHandle (HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
1421 log .info ("LogHandlerInterceptor::preHandle()" );
22+ logRequestDetails (request );
1523 return true ;
1624 }
1725
@@ -23,5 +31,34 @@ public void postHandle(HttpServletRequest request, HttpServletResponse response,
2331 @ Override
2432 public void afterCompletion (HttpServletRequest request , HttpServletResponse response , Object handler , Exception ex ) throws Exception {
2533 log .info ("LogHandlerInterceptor::afterCompletion()" );
34+ logResponseDetails (response );
35+ }
36+
37+
38+ private void logRequestDetails (HttpServletRequest request ) {
39+ log .info ("Request: {}: {}" , request .getMethod (), request .getRequestURL ());
40+ Enumeration <String > headerNames = request .getHeaderNames ();
41+ Map <String , String > headers = new HashMap <>();
42+ while (headerNames .hasMoreElements ()) {
43+ String headerName = headerNames .nextElement ();
44+ headers .put (headerName , request .getHeader (headerName ));
45+ }
46+ log .info ("Request headers: {}" , headers );
47+
48+ try {
49+ String body = request .getReader ().lines ().collect (Collectors .joining (System .lineSeparator ()));
50+ log .info ("Request body: {}" , body );
51+ } catch (IOException e ) {
52+ log .error ("Error reading the request body: " , e );
53+ }
54+ }
55+
56+ private void logResponseDetails (HttpServletResponse response ) {
57+ log .info ("Response: {}" , HttpStatusCode .valueOf (response .getStatus ()));
58+ Map <String , String > headers = new HashMap <>();
59+ for (String headerName : response .getHeaderNames ()) {
60+ headers .put (headerName , response .getHeader (headerName ));
61+ }
62+ log .info ("Response headers: {}" , headers );
2663 }
2764}
0 commit comments