@@ -14,35 +14,49 @@ var (
1414 EnableVerbose bool
1515)
1616
17+ func (t * HTTPServer ) shouldDumpBody (bodysize int64 ) bool {
18+ return t .options .MaxDumpBodySize > 0 && bodysize > t .options .MaxDumpBodySize
19+ }
20+
1721func (t * HTTPServer ) loglayer (handler http.Handler ) http.Handler {
1822 return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
19- fullRequest , _ := httputil .DumpRequest (r , true )
20- lrw := newLoggingResponseWriter (w )
23+ var fullRequest []byte
24+ if t .shouldDumpBody (r .ContentLength ) {
25+ fullRequest , _ = httputil .DumpRequest (r , false )
26+ } else {
27+ fullRequest , _ = httputil .DumpRequest (r , true )
28+ }
29+ lrw := newLoggingResponseWriter (w , t .options .MaxDumpBodySize )
2130 handler .ServeHTTP (lrw , r )
2231
2332 if EnableVerbose {
2433 headers := new (bytes.Buffer )
2534 lrw .Header ().Write (headers ) //nolint
2635 gologger .Print ().Msgf ("\n Remote Address: %s\n %s\n %s %d %s\n %s\n %s\n " , r .RemoteAddr , string (fullRequest ), r .Proto , lrw .statusCode , http .StatusText (lrw .statusCode ), headers .String (), string (lrw .Data ))
2736 } else {
28- gologger .Print ().Msgf ("%s \" %s %s %s\" %d %d" , r .RemoteAddr , r .Method , r .URL , r .Proto , lrw .statusCode , len ( lrw .Data ) )
37+ gologger .Print ().Msgf ("%s \" %s %s %s\" %d %d" , r .RemoteAddr , r .Method , r .URL , r .Proto , lrw .statusCode , lrw .Size )
2938 }
3039 })
3140}
3241
3342type loggingResponseWriter struct {
3443 http.ResponseWriter
35- statusCode int
36- Data []byte
44+ statusCode int
45+ Data []byte
46+ Size int
47+ MaxDumpSize int64
3748}
3849
39- func newLoggingResponseWriter (w http.ResponseWriter ) * loggingResponseWriter {
40- return & loggingResponseWriter {w , http .StatusOK , []byte {}}
50+ func newLoggingResponseWriter (w http.ResponseWriter , maxSize int64 ) * loggingResponseWriter {
51+ return & loggingResponseWriter {w , http .StatusOK , []byte {}, 0 , maxSize }
4152}
4253
4354// Write the data
4455func (lrw * loggingResponseWriter ) Write (data []byte ) (int , error ) {
45- lrw .Data = append (lrw .Data , data ... )
56+ if len (lrw .Data ) < int (lrw .MaxDumpSize ) {
57+ lrw .Data = append (lrw .Data , data ... )
58+ }
59+ lrw .Size += len (data )
4660 return lrw .ResponseWriter .Write (data )
4761}
4862
0 commit comments