package middleware import ( "log" "net/http" "time" ) func Logging(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() wrapped := &responseWriter{ResponseWriter: w, statusCode: http.StatusOK} next.ServeHTTP(wrapped, r) log.Printf( "%s %s %d %s", r.Method, r.URL.Path, wrapped.statusCode, time.Since(start), ) }) } type responseWriter struct { http.ResponseWriter statusCode int }