chore(reqlog): header logging

This commit is contained in:
DevMiner 2024-07-23 18:52:10 +02:00
parent cfb96e811e
commit 84fd50f8d6

View file

@ -1,22 +1,26 @@
package unitel
import (
"fmt"
"time"
"github.com/getsentry/sentry-go"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/utils"
"github.com/rs/zerolog"
"go.opentelemetry.io/otel/trace"
)
const requestBufferSize = 1000
func RequestLogger(l zerolog.Logger) fiber.Handler {
func RequestLogger(l zerolog.Logger, requestHeaders, responseHeaders bool) fiber.Handler {
type request struct {
Method string
Path string
Status int
Duration time.Duration
RequestHeaders map[string][]string
ResponseHeaders map[string][]string
OtelSpanID *trace.SpanID
SentrySpanID *sentry.SpanID
}
@ -41,6 +45,22 @@ func RequestLogger(l zerolog.Logger) fiber.Handler {
l2 = l2.Str("sentry_span_id", r.SentrySpanID.String())
}
if requestHeaders {
for k, v := range r.RequestHeaders {
for i, vv := range v {
l2 = l2.Str(fmt.Sprintf("request.headers.%s.%d", k, i), vv)
}
}
}
if responseHeaders {
for k, v := range r.ResponseHeaders {
for i, vv := range v {
l2 = l2.Str(fmt.Sprintf("response.headers.%s.%d", k, i), vv)
}
}
}
l2.Msg("request")
}
}()
@ -71,7 +91,7 @@ func RequestLogger(l zerolog.Logger) fiber.Handler {
}
// pushing the request to the logger, so we don't block the requests
reqs <- request{
req := request{
Method: c.Method(),
Path: c.Path(),
Status: status,
@ -80,6 +100,26 @@ func RequestLogger(l zerolog.Logger) fiber.Handler {
SentrySpanID: sentrySpanId,
}
if requestHeaders {
req.RequestHeaders = make(map[string][]string)
for k, v := range c.GetReqHeaders() {
for _, vv := range v {
req.RequestHeaders[k] = append(req.RequestHeaders[k], utils.CopyString(vv))
}
}
}
if responseHeaders {
req.ResponseHeaders = make(map[string][]string)
for k, v := range c.GetRespHeaders() {
for _, vv := range v {
req.ResponseHeaders[k] = append(req.ResponseHeaders[k], utils.CopyString(vv))
}
}
}
reqs <- req
return err
}
}