diff --git a/go.mod b/go.mod index 5379980..a4c8276 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require github.com/rs/zerolog v1.33.0 require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect + github.com/urfave/negroni v1.0.0 golang.org/x/sys v0.12.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 ) diff --git a/go.sum b/go.sum index 88f19dc..f0da108 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= diff --git a/logging-middleware.go b/logging-middleware.go new file mode 100644 index 0000000..c5305fd --- /dev/null +++ b/logging-middleware.go @@ -0,0 +1,35 @@ +package main + +import ( + "net/http" + "time" + + "github.com/rs/zerolog/log" + "github.com/urfave/negroni" +) + +// type loggingResponseWriter struct { +// http.ResponseWriter +// statusCode int +// } +// +// func NewLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter { +// return &loggingResponseWriter{w, http.StatusOK} +// } +// +// func (lrw *loggingResponseWriter) WriteHeader(code int) { +// lrw.statusCode = code +// lrw.ResponseWriter.WriteHeader(code) +// } + +func RequestLogger(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + + // lrw := NewLoggingResponseWriter(w) + lrw := negroni.NewResponseWriter(w) + next.ServeHTTP(lrw, r) + + log.Info().Str("host", r.Host).Str("uri", r.RequestURI).Str("method", r.Method).Int("status", lrw.Status()).Int("size", lrw.Size()).Str("duration", time.Since(start).String()).Msg("Received Request") + }) +} diff --git a/main.go b/main.go index 91c678c..ccbca4f 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,8 @@ func main() { }, } - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + mux := http.NewServeMux() + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { port, ok := domains[r.Host] if !ok { w.WriteHeader(http.StatusOK) @@ -122,7 +123,8 @@ func main() { }) server := http.Server{ - Addr: fmt.Sprintf(":%d", *portFlag), + Addr: fmt.Sprintf(":%d", *portFlag), + Handler: RequestLogger(mux), } if *certFlag != "" && *keyFlag != "" { @@ -170,7 +172,7 @@ func setupLogging() { } func dumpRequest(w http.ResponseWriter, r *http.Request) bool { - if e := log.Debug(); e.Enabled() { + if e := log.Debug(); e.Enabled() && r.Method == "POST" { rDump, err := httputil.DumpRequest(r, true) if err != nil { log.Error().Err(err).Msg("Could not dump request")