From d63510b27ccfec5f52eeae2d198c5e98da3ce4ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Hald=20S=C3=B8rensen?= Date: Sun, 12 Nov 2023 22:04:54 +0100 Subject: [PATCH] Add context to http server log middleware (#500) --- cmd/server/http/log.go | 7 ++----- internal/log/context.go | 4 ++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/cmd/server/http/log.go b/cmd/server/http/log.go index d5b54be3..1fc20cd3 100644 --- a/cmd/server/http/log.go +++ b/cmd/server/http/log.go @@ -31,17 +31,13 @@ func reqrespLogger(h http.Handler) http.Handler { // request duration in miliseconds duration := time.Since(start).Nanoseconds() / 1e6 statusCode := statusWriter.statusCode - requestID := getRequestID(r) fields := []interface{}{ - "requestId", requestID, "req", struct { - ID string `json:"id,omitempty"` URL string `json:"url,omitempty"` Method string `json:"method,omitempty"` Path string `json:"path,omitempty"` Headers map[string]string `json:"headers,omitempty"` }{ - ID: requestID, URL: r.URL.RequestURI(), Method: r.Method, Path: r.URL.Path, @@ -58,7 +54,8 @@ func reqrespLogger(h http.Handler) http.Handler { if err != nil { fields = append(fields, "error", err) } - logger := log.With(fields...) + + logger := log.WithContext(r.Context()).With(fields...) if statusCode >= http.StatusInternalServerError { logger.Errorf("[%d] %s %s", statusCode, r.Method, r.URL.Path) return diff --git a/internal/log/context.go b/internal/log/context.go index 05db5823..b96e9eab 100644 --- a/internal/log/context.go +++ b/internal/log/context.go @@ -14,5 +14,9 @@ func WithContext(ctx context.Context) *Logger { // AddContext adds fields to the context that can be used in WithContext. func AddContext(ctx context.Context, fields ...interface{}) context.Context { + values, ok := ctx.Value(contextKey{}).([]interface{}) + if ok && values != nil { + fields = append(fields, values...) + } return context.WithValue(ctx, contextKey{}, fields) }