this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 41 lines 918 B view raw
1package utility 2 3import ( 4 "log/slog" 5 "net/http" 6 "time" 7) 8 9// Logger is an HTTP middleware that logs each request. 10func Logger(next http.Handler) http.Handler { 11 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 12 if !slog.Default().Enabled(r.Context(), slog.LevelInfo) { 13 next.ServeHTTP(w, r) 14 return 15 } 16 17 start := time.Now() 18 rw := &responseWriter{ResponseWriter: w, code: http.StatusOK} 19 next.ServeHTTP(rw, r) 20 21 attrs := []slog.Attr{ 22 slog.String("method", r.Method), 23 slog.String("path", r.URL.Path), 24 slog.Int("code", rw.code), 25 slog.String("duration", time.Since(start).String()), 26 slog.String("remote", r.RemoteAddr), 27 } 28 29 slog.LogAttrs(r.Context(), slog.LevelInfo, "http request", attrs...) 30 }) 31} 32 33type responseWriter struct { 34 http.ResponseWriter 35 code int 36} 37 38func (rw *responseWriter) WriteHeader(code int) { 39 rw.code = code 40 rw.ResponseWriter.WriteHeader(code) 41}