4 // LoggingResponseWriter
7 "github.com/gorilla/mux"
12 type LoggingResponseWriter struct {
18 func (loggingWriter *LoggingResponseWriter) WriteHeader(code int) {
19 loggingWriter.status = code
20 loggingWriter.ResponseWriter.WriteHeader(code)
23 func (loggingWriter *LoggingResponseWriter) Write(data []byte) (int, error){
24 loggingWriter.data = data
25 return loggingWriter.ResponseWriter.Write(data)
28 type RESTRouterWrapper struct {
32 func MakeRESTRouterWrapper(r *mux.Router) (RESTRouterWrapper) {
33 return (RESTRouterWrapper{r})
36 func (this RESTRouterWrapper) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
37 loggingWriter := LoggingResponseWriter{200, nil, resp}
38 this.router.ServeHTTP(&loggingWriter, req)
39 if loggingWriter.data != nil && loggingWriter.status == 200 {
40 data_len := len(loggingWriter.data)
41 if data_len > 200 { // this could be a block, so just print the size
42 log.Printf("[%s] %s %s %d %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, data_len)
43 } else { // this could be a hash or status or a small block etc
44 log.Printf("[%s] %s %s %d %s", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status, loggingWriter.data)
47 log.Printf("[%s] %s %s %d", req.RemoteAddr, req.Method, req.URL.Path[1:], loggingWriter.status)