diff --git a/go.mod b/go.mod index 4e94620..e836c85 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,8 @@ require ( github.com/samber/slog-multi v1.0.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect + go.opentelemetry.io/otel v1.19.0 // indirect + go.opentelemetry.io/otel/trace v1.19.0 // indirect golang.org/x/arch v0.3.0 // indirect golang.org/x/crypto v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect diff --git a/go.sum b/go.sum index 2c1722c..0deefe5 100644 --- a/go.sum +++ b/go.sum @@ -74,6 +74,10 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= diff --git a/middleware.go b/middleware.go index 03f9997..9c17be8 100644 --- a/middleware.go +++ b/middleware.go @@ -11,6 +11,7 @@ import ( "github.com/gin-gonic/gin" "github.com/google/uuid" + "go.opentelemetry.io/otel/trace" ) const ( @@ -45,6 +46,8 @@ type Config struct { WithRequestHeader bool WithResponseBody bool WithResponseHeader bool + WithSpanID bool + WithTraceID bool Filters []Filter } @@ -64,6 +67,8 @@ func New(logger *slog.Logger) gin.HandlerFunc { WithRequestHeader: false, WithResponseBody: false, WithResponseHeader: false, + WithSpanID: false, + WithTraceID: false, Filters: []Filter{}, }) @@ -84,6 +89,8 @@ func NewWithFilters(logger *slog.Logger, filters ...Filter) gin.HandlerFunc { WithRequestHeader: false, WithResponseBody: false, WithResponseHeader: false, + WithSpanID: false, + WithTraceID: false, Filters: filters, }) @@ -141,6 +148,16 @@ func NewWithConfig(logger *slog.Logger, config Config) gin.HandlerFunc { attributes = append(attributes, slog.String("request-id", requestID)) } + if config.WithTraceID { + traceID := trace.SpanFromContext(c.Request.Context()).SpanContext().TraceID().String() + attributes = append(attributes, slog.String("trace-id", traceID)) + } + + if config.WithSpanID { + spanID := trace.SpanFromContext(c.Request.Context()).SpanContext().SpanID().String() + attributes = append(attributes, slog.String("span-id", spanID)) + } + // request if config.WithRequestBody { attributes = append(attributes, slog.Group("request", slog.String("body", string(reqBody))))