func TestEncodeDecodeRawSpan(t *testing.T) { s := basictracer.RawSpan{ Context: basictracer.SpanContext{ TraceID: 1, SpanID: 2, Sampled: true, Baggage: make(map[string]string), }, ParentSpanID: 13, Operation: "testop", Start: timeutil.Now(), Duration: 15 * time.Millisecond, Tags: make(map[string]interface{}), Logs: []opentracing.LogRecord{ { Timestamp: timeutil.Now().Add(2 * time.Millisecond), }, { Timestamp: timeutil.Now().Add(5 * time.Millisecond), Fields: []otlog.Field{ otlog.Int("f1", 3), otlog.String("f2", "f2Val"), }, }, }, } s.Context.Baggage["bag"] = "bagVal" s.Tags["tag"] = 5 enc, err := EncodeRawSpan(&s, nil) if err != nil { t.Fatal(err) } var d basictracer.RawSpan if err = DecodeRawSpan(enc, &d); err != nil { t.Fatal(err) } // We cannot use DeepEqual because we encode all log fields as strings. So // e.g. the "f1" field above is now a string, not an int. The string // representations must match though. sStr := fmt.Sprint(s) dStr := fmt.Sprint(d) if sStr != dStr { t.Errorf("initial span: '%s', after encode/decode: '%s'", sStr, dStr) } }
// AddLogTagInt adds an integer tag; see WithLogTagInt. func (ac *AmbientContext) AddLogTagInt(name string, value int) { ac.addTag(otlog.Int(name, value)) }
// WithLogTagInt is a variant of WithLogTag that avoids the allocation // associated with boxing the value in an interface{}. func WithLogTagInt(ctx context.Context, name string, value int) context.Context { return addLogTagChain(ctx, &logTag{Field: otlog.Int(name, value)}) }