prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

commit e1f9eaa612ef38fb495b9892bf84b363f9f5b5a5
parent 822540dcae92b835091383a222e2e4d4c7753085
Author: Damian Myrda <damian@prime8.dev>
Date:   Tue,  7 Apr 2026 22:50:49 -0500

fix: log HTTP requests at info with structured fields

Diffstat:
Mcmd/server/logging.go | 28++++++++++++++++++++++++++++
Mcmd/server/main.go | 2+-
2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/cmd/server/logging.go b/cmd/server/logging.go @@ -2,8 +2,12 @@ package main import ( "log/slog" + "net/http" "os" "strings" + "time" + + "github.com/go-chi/chi/v5/middleware" ) func configureLogger() { @@ -26,3 +30,27 @@ func envLogLevel(key string, fallback slog.Level) slog.Level { return lvl } + +func requestLoggerMiddleware(logger *slog.Logger) func(http.Handler) http.Handler { + if logger == nil { + logger = slog.Default() + } + + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + start := time.Now() + ww := middleware.NewWrapResponseWriter(w, r.ProtoMajor) + next.ServeHTTP(ww, r) + + logger.Info("http request", + "method", r.Method, + "url", r.URL.String(), + "proto", r.Proto, + "remote_addr", r.RemoteAddr, + "status", ww.Status(), + "bytes", ww.BytesWritten(), + "duration", time.Since(start), + ) + }) + } +} diff --git a/cmd/server/main.go b/cmd/server/main.go @@ -31,7 +31,7 @@ func run() error { } r := chi.NewRouter() - r.Use(middleware.Logger) + r.Use(requestLoggerMiddleware(slog.Default())) r.Use(middleware.Recoverer) r.Use(middleware.Timeout(30 * time.Second))