From 60717ecc65a22ad6d38a6056e90972c6c0ca902b Mon Sep 17 00:00:00 2001 From: Planxnx Date: Fri, 12 Jul 2024 00:18:15 +0700 Subject: [PATCH] feat(requestlogger): add response headers --- pkg/middleware/requestlogger/requestlogger.go | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/pkg/middleware/requestlogger/requestlogger.go b/pkg/middleware/requestlogger/requestlogger.go index aad2d47..70b1eb5 100644 --- a/pkg/middleware/requestlogger/requestlogger.go +++ b/pkg/middleware/requestlogger/requestlogger.go @@ -13,12 +13,13 @@ import ( ) type Config struct { - AllRequestHeaders bool `env:"REQUEST_HEADER" envDefault:"false" mapstructure:"request_header"` // Log all request headers - AllRequestQueries bool `env:"REQUEST_QUERY" envDefault:"false" mapstructure:"request_query"` // Log all request queries - Disable bool `env:"DISABLE" envDefault:"false" mapstructure:"disable"` // Disable logger level `INFO` - HiddenRequestHeaders []string `env:"HIDDEN_REQUEST_HEADERS" mapstructure:"hidden_request_headers"` // Hide specific headers from log - WithRequestHeaders []string `env:"WITH_REQUEST_HEADERS" mapstructure:"with_request_headers"` // Add specific headers to log (higher priority than `HiddenRequestHeaders`) - With map[string]interface{} `env:"WITH" mapstructure:"with"` // Additional fields to log + AllRequestHeaders bool `env:"REQUEST_HEADER" envDefault:"false" mapstructure:"request_header"` // Log all request headers + AllResponseHeaders bool `env:"RESPONSE_HEADER" envDefault:"false" mapstructure:"response_header"` // Log all response headers + AllRequestQueries bool `env:"REQUEST_QUERY" envDefault:"false" mapstructure:"request_query"` // Log all request queries + Disable bool `env:"DISABLE" envDefault:"false" mapstructure:"disable"` // Disable logger level `INFO` + HiddenRequestHeaders []string `env:"HIDDEN_REQUEST_HEADERS" mapstructure:"hidden_request_headers"` // Hide specific headers from log + WithRequestHeaders []string `env:"WITH_REQUEST_HEADERS" mapstructure:"with_request_headers"` // Add specific headers to log (higher priority than `HiddenRequestHeaders`) + With map[string]interface{} `env:"WITH" mapstructure:"with"` // Additional fields to log } // New setup request context and information @@ -118,6 +119,23 @@ func New(config Config) fiber.Handler { requestAttributes = append(requestAttributes, slog.Group("headers", kv...)) } + if config.AllResponseHeaders { + kv := []any{} + for k, v := range c.GetRespHeaders() { + // skip hidden headers + if _, found := hiddenRequestHeaders[strings.ToLower(k)]; found { + continue + } + + val := any(v) + if len(v) == 1 { + val = v[0] + } + kv = append(kv, slog.Any(k, val)) + } + responseAttributes = append(responseAttributes, slog.Group("headers", kv...)) + } + level := slog.LevelInfo if err != nil || status >= http.StatusInternalServerError { level = slog.LevelError