From de35a630edcbe2ddcadf002ab3efe027d77fc046 Mon Sep 17 00:00:00 2001 From: radhika Date: Sun, 16 Nov 2014 15:51:37 -0500 Subject: [PATCH] 4194: logging writer copies / appends passed in data into its own buffer. --- services/keepstore/router_wrapper.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/services/keepstore/router_wrapper.go b/services/keepstore/router_wrapper.go index 23e7eb2eb0..b1ebd41d8b 100644 --- a/services/keepstore/router_wrapper.go +++ b/services/keepstore/router_wrapper.go @@ -4,24 +4,25 @@ package main // LoggingResponseWriter import ( + "bytes" "github.com/gorilla/mux" "log" "net/http" ) type LoggingResponseWriter struct { - status int - data []byte + Status int + Data *bytes.Buffer http.ResponseWriter } func (loggingWriter *LoggingResponseWriter) WriteHeader(code int) { - loggingWriter.status = code + loggingWriter.Status = code loggingWriter.ResponseWriter.WriteHeader(code) } func (loggingWriter *LoggingResponseWriter) Write(data []byte) (int, error){ - loggingWriter.data = data + loggingWriter.Data.Write(data) return loggingWriter.ResponseWriter.Write(data) } @@ -35,16 +36,17 @@ func MakeRESTRouterWrapper() (RESTRouterWrapper) { } func (wrapper RESTRouterWrapper) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - loggingWriter := LoggingResponseWriter{200, nil, resp} + loggingWriter := LoggingResponseWriter{200, bytes.NewBuffer(make([]byte, 0, 0)), resp} wrapper.router.ServeHTTP(&loggingWriter, req) - if loggingWriter.data != nil && loggingWriter.status == 200 { - data_len := len(loggingWriter.data) - if data_len > 200 { // this could be a block, so just print the size - log.Printf("[%s] %s %s %d %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, data_len) + if loggingWriter.Status == 200 { + if loggingWriter.Data.Len() > 200 { // could be large block, so just print the size + log.Printf("[%s] %s %s %d %d", req.RemoteAddr, req.Method, req.URL.Path[1:], + loggingWriter.Status, loggingWriter.Data.Len()) } else { // this could be a hash or status or a small block etc - log.Printf("[%s] %s %s %d %s", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, loggingWriter.data) + log.Printf("[%s] %s %s %d %s", req.RemoteAddr, req.Method, req.URL.Path[1:], + loggingWriter.Status, loggingWriter.Data) } } else { - log.Printf("[%s] %s %s %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status) + log.Printf("[%s] %s %s %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.Status) } } -- 2.30.2