summaryrefslogtreecommitdiff
path: root/pkg/logger
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/logger')
-rw-r--r--pkg/logger/body_writer.go65
-rw-r--r--pkg/logger/middleware.go72
2 files changed, 0 insertions, 137 deletions
diff --git a/pkg/logger/body_writer.go b/pkg/logger/body_writer.go
deleted file mode 100644
index f57a03e..0000000
--- a/pkg/logger/body_writer.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package logger
-
-import (
- "bufio"
- "bytes"
- "errors"
- "net"
- "net/http"
-)
-
-type bodyWriter struct {
- http.ResponseWriter
- body *bytes.Buffer
- maxSize int
- bytes int
- status int
-}
-
-func newBodyWriter(writer http.ResponseWriter, recordBody bool) *bodyWriter {
- var body *bytes.Buffer
- if recordBody {
- body = bytes.NewBufferString("")
- }
- return &bodyWriter{
- body: body,
- maxSize: 64000,
- ResponseWriter: writer,
- status: http.StatusNotImplemented,
- }
-}
-
-// implements http.ResponseWriter
-func (w *bodyWriter) Write(b []byte) (int, error) {
- if w.body != nil {
- if w.body.Len()+len(b) > w.maxSize {
- w.body.Write(b[:w.maxSize-w.body.Len()])
- } else {
- w.body.Write(b)
- }
- }
-
- w.bytes += len(b)
- return w.ResponseWriter.Write(b)
-}
-
-// implements http.ResponseWriter
-func (w *bodyWriter) WriteHeader(code int) {
- w.status = code
- w.ResponseWriter.WriteHeader(code)
-}
-
-// implements http.Flusher
-func (w *bodyWriter) Flush() {
- if f, ok := w.ResponseWriter.(http.Flusher); ok {
- f.Flush()
- }
-}
-
-// implements http.Hijacker
-func (w *bodyWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
- if hi, ok := w.ResponseWriter.(http.Hijacker); ok {
- return hi.Hijack()
- }
- return nil, nil, errors.New("Hijack not supported")
-}
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...)
- })
-}