summaryrefslogtreecommitdiff
path: root/pkg/logger/middleware.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/logger/middleware.go')
-rw-r--r--pkg/logger/middleware.go72
1 files changed, 0 insertions, 72 deletions
diff --git a/pkg/logger/middleware.go b/pkg/logger/middleware.go
deleted file mode 100644
index 54cca96..0000000
--- a/pkg/logger/middleware.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package logger
-
-import (
- "log/slog"
- "net/http"
- "runtime/debug"
- "strconv"
- "time"
-)
-
-func Middleware(next http.Handler, recordBody bool) http.Handler {
- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- if r.Method == "GET" && r.URL.Path == "/healthz" {
- next.ServeHTTP(w, r)
- return
- }
-
- defer func() {
- if err := recover(); err != nil {
- w.WriteHeader(http.StatusInternalServerError)
- slog.Error(
- "panic",
- "err", err,
- "trace", string(debug.Stack()),
- )
- }
- }()
- start := time.Now()
- path := r.URL.Path
- query := r.URL.RawQuery
-
- bw := newBodyWriter(w, recordBody)
-
- next.ServeHTTP(bw, r)
-
- end := time.Now()
- requestAttributes := []slog.Attr{
- slog.Time("time", start.UTC()),
- slog.String("method", r.Method),
- slog.String("host", r.Host),
- slog.String("path", path),
- slog.String("query", query),
- slog.String("ip", r.RemoteAddr),
- }
- responseAttributes := []slog.Attr{
- slog.Time("time", end.UTC()),
- slog.Duration("latency", end.Sub(start)),
- slog.Int("length", bw.bytes),
- slog.Int("status", bw.status),
- }
- if recordBody {
- responseAttributes = append(responseAttributes, slog.String("body", bw.body.String()))
- }
- attributes := []slog.Attr{
- {
- Key: "request",
- Value: slog.GroupValue(requestAttributes...),
- },
- {
- Key: "response",
- Value: slog.GroupValue(responseAttributes...),
- },
- }
- level := slog.LevelInfo
- if bw.status >= http.StatusInternalServerError {
- level = slog.LevelError
- } else if bw.status >= http.StatusBadRequest && bw.status < http.StatusInternalServerError {
- level = slog.LevelWarn
- }
- slog.LogAttrs(r.Context(), level, strconv.Itoa(bw.status)+": "+http.StatusText(bw.status), attributes...)
- })
-}