chore(reqlog): header logging
This commit is contained in:
parent
cfb96e811e
commit
84fd50f8d6
1 changed files with 48 additions and 8 deletions
|
@ -1,24 +1,28 @@
|
||||||
package unitel
|
package unitel
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/getsentry/sentry-go"
|
"github.com/getsentry/sentry-go"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"github.com/gofiber/fiber/v2/utils"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
const requestBufferSize = 1000
|
const requestBufferSize = 1000
|
||||||
|
|
||||||
func RequestLogger(l zerolog.Logger) fiber.Handler {
|
func RequestLogger(l zerolog.Logger, requestHeaders, responseHeaders bool) fiber.Handler {
|
||||||
type request struct {
|
type request struct {
|
||||||
Method string
|
Method string
|
||||||
Path string
|
Path string
|
||||||
Status int
|
Status int
|
||||||
Duration time.Duration
|
Duration time.Duration
|
||||||
OtelSpanID *trace.SpanID
|
RequestHeaders map[string][]string
|
||||||
SentrySpanID *sentry.SpanID
|
ResponseHeaders map[string][]string
|
||||||
|
OtelSpanID *trace.SpanID
|
||||||
|
SentrySpanID *sentry.SpanID
|
||||||
}
|
}
|
||||||
|
|
||||||
reqs := make(chan request, requestBufferSize)
|
reqs := make(chan request, requestBufferSize)
|
||||||
|
@ -41,6 +45,22 @@ func RequestLogger(l zerolog.Logger) fiber.Handler {
|
||||||
l2 = l2.Str("sentry_span_id", r.SentrySpanID.String())
|
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")
|
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
|
// pushing the request to the logger, so we don't block the requests
|
||||||
reqs <- request{
|
req := request{
|
||||||
Method: c.Method(),
|
Method: c.Method(),
|
||||||
Path: c.Path(),
|
Path: c.Path(),
|
||||||
Status: status,
|
Status: status,
|
||||||
|
@ -80,6 +100,26 @@ func RequestLogger(l zerolog.Logger) fiber.Handler {
|
||||||
SentrySpanID: sentrySpanId,
|
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue