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:
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))