package hws import ( "net/http" "time" "github.com/gobwas/glob" ) // Middleware to add logs to console with details of the request func logging(next http.Handler, logger *logger) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if logger == nil { next.ServeHTTP(w, r) return } if globTest(r.URL.Path, logger.ignoredPaths) { next.ServeHTTP(w, r) return } start, err := getStartTime(r.Context()) if err != nil { logger.logger.Error().Err(err) return } wrapped := &wrappedWriter{ ResponseWriter: w, statusCode: http.StatusOK, } next.ServeHTTP(wrapped, r) logger.logger.Info(). Int("status", wrapped.statusCode). Str("method", r.Method). Str("resource", r.URL.Path). Dur("time_elapsed", time.Since(start)). Str("remote_addr", r.Header.Get("X-Forwarded-For")). Msg("Served") }) } func globTest(testPath string, globs []glob.Glob) bool { for _, g := range globs { if g.Match(testPath) { return true } } return false }