dgrp/log.go

49 lines
824 B
Go

package main
import (
"log"
"net/http"
"strings"
"time"
)
type responseWriter struct {
http.ResponseWriter
status int
wroteHeader bool
}
func (rw *responseWriter) WriteHeader(code int) {
if rw.wroteHeader {
return
}
rw.status = code
rw.ResponseWriter.WriteHeader(code)
rw.wroteHeader = true
return
}
func loghttpreq(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
method := r.Method
path := r.URL.EscapedPath()
endpoint := strings.Split(r.RemoteAddr, ":")
ip := endpoint[0]
wrapped := &responseWriter{
ResponseWriter: w,
}
start := time.Now()
next.ServeHTTP(wrapped, r)
responseTime := time.Since(start)
log.Printf(
"%-15v %14v %v %-9v %v",
ip,
responseTime,
wrapped.status,
method,
path,
)
})
}