// netTraceIntegrator is passed into basictracer as NewSpanEventListener // and causes all traces to be registered with the net/trace endpoint. func netTraceIntegrator() func(basictracer.SpanEvent) { var tr trace.Trace return func(e basictracer.SpanEvent) { switch t := e.(type) { case basictracer.EventCreate: tr = trace.New("tracing", t.OperationName) tr.SetMaxEvents(maxLogsPerSpan) case basictracer.EventFinish: tr.Finish() case basictracer.EventTag: tr.LazyPrintf("%s:%v", t.Key, t.Value) case basictracer.EventLogFields: // TODO(radu): when LightStep supports arbitrary fields, we should make // the formatting of the message consistent with that. Until then we treat // legacy events that just have an "event" key specially. if len(t.Fields) == 1 && t.Fields[0].Key() == "event" { tr.LazyPrintf("%s", t.Fields[0].Value()) } else { var buf bytes.Buffer for i, f := range t.Fields { if i > 0 { buf.WriteByte(' ') } fmt.Fprintf(&buf, "%s:%v", f.Key(), f.Value()) } tr.LazyPrintf("%s", buf.String()) } case basictracer.EventLog: panic("EventLog is deprecated") } } }
// netTraceIntegrator is passed into basictracer as NewSpanEventListener // and causes all traces to be registered with the net/trace endpoint. func netTraceIntegrator() func(basictracer.SpanEvent) { var tr trace.Trace return func(e basictracer.SpanEvent) { switch t := e.(type) { case basictracer.EventCreate: tr = trace.New("tracing", t.OperationName) tr.SetMaxEvents(maxLogsPerSpan) case basictracer.EventFinish: tr.Finish() case basictracer.EventTag: tr.LazyPrintf("%s:%v", t.Key, t.Value) case basictracer.EventLogFields: var buf bytes.Buffer for i, f := range t.Fields { if i > 0 { buf.WriteByte(' ') } fmt.Fprintf(&buf, "%s:%v", f.Key(), f.Value()) } tr.LazyPrintf("%s", buf.String()) case basictracer.EventLog: if t.Payload != nil { tr.LazyPrintf("%s (payload %v)", t.Event, t.Payload) } else { tr.LazyPrintf("%s", t.Event) } } } }