From a6918e9ad0d2ecc43f59779ae463bfc595563836 Mon Sep 17 00:00:00 2001 From: "jiangqi.rrt" Date: Thu, 23 Oct 2025 16:59:42 +0800 Subject: [PATCH] support set spanID --- CHANGLOG.md | 6 +++++- internal/trace/trace.go | 8 +++++++- internal/version.go | 2 +- trace.go | 9 +++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGLOG.md b/CHANGLOG.md index 4b0f0e2..2cbdf1b 100644 --- a/CHANGLOG.md +++ b/CHANGLOG.md @@ -1,5 +1,9 @@ -## [0.1.14] - 2025-10-17 +## [0.1.15] - 2025-10-23 ### Added +- support set spanID when StartSpan + +## [0.1.14] - 2025-10-17 +### Modified - fix span lock ## [0.1.13] - 2025-09-24 diff --git a/internal/trace/trace.go b/internal/trace/trace.go index 6d782c7..c73f258 100644 --- a/internal/trace/trace.go +++ b/internal/trace/trace.go @@ -35,6 +35,7 @@ type Options struct { type StartSpanOptions struct { StartTime time.Time ParentSpanID string + SpanID string TraceID string Baggage map[string]string StartNewTrace bool @@ -133,6 +134,11 @@ func (t *Provider) startSpan(ctx context.Context, spanName string, spanType stri parentID = options.ParentSpanID } + spanID := options.SpanID + if len(spanID) == 0 { + spanID = util.Gen16CharID() + } + traceID := "" if options.TraceID != "" { traceID = options.TraceID @@ -160,7 +166,7 @@ func (t *Provider) startSpan(ctx context.Context, spanName string, spanType stri // 2. create span and init s := &Span{ SpanContext: SpanContext{ - SpanID: util.Gen16CharID(), + SpanID: spanID, TraceID: traceID, Baggage: make(map[string]string), }, diff --git a/internal/version.go b/internal/version.go index 8f8c740..9cd80d7 100644 --- a/internal/version.go +++ b/internal/version.go @@ -5,5 +5,5 @@ package internal // Version returns the version of the loop package. func Version() string { - return "v0.1.14" + return "v0.1.15" } diff --git a/trace.go b/trace.go index a1aea41..f948896 100644 --- a/trace.go +++ b/trace.go @@ -72,3 +72,12 @@ func WithSpanWorkspaceID(workspaceID string) StartSpanOption { ops.WorkspaceID = workspaceID } } + +// WithSpanID Set the spanID of the span. +// Only use when specifying a SpanID! By default, SDK can automatically generate a SpanID +// SpanID must be a combination of 16 digits and letters. +func WithSpanID(spanID string) StartSpanOption { + return func(ops *startSpanOptions) { + ops.SpanID = spanID + } +}