12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package oc
- import (
- "github.com/sirupsen/logrus"
- "go.opencensus.io/trace"
- )
- var _ = (trace.Exporter)(&LogrusExporter{})
- // LogrusExporter is an OpenCensus `trace.Exporter` that exports
- // `trace.SpanData` to logrus output.
- type LogrusExporter struct {
- }
- // ExportSpan exports `s` based on the the following rules:
- //
- // 1. All output will contain `s.Attributes`, `s.TraceID`, `s.SpanID`,
- // `s.ParentSpanID` for correlation
- //
- // 2. Any calls to .Annotate will not be supported.
- //
- // 3. The span itself will be written at `logrus.InfoLevel` unless
- // `s.Status.Code != 0` in which case it will be written at `logrus.ErrorLevel`
- // providing `s.Status.Message` as the error value.
- func (le *LogrusExporter) ExportSpan(s *trace.SpanData) {
- // Combine all span annotations with traceID, spanID, parentSpanID
- baseEntry := logrus.WithFields(logrus.Fields(s.Attributes))
- baseEntry.Data["traceID"] = s.TraceID.String()
- baseEntry.Data["spanID"] = s.SpanID.String()
- baseEntry.Data["parentSpanID"] = s.ParentSpanID.String()
- baseEntry.Data["startTime"] = s.StartTime
- baseEntry.Data["endTime"] = s.EndTime
- baseEntry.Data["duration"] = s.EndTime.Sub(s.StartTime).String()
- baseEntry.Data["name"] = s.Name
- baseEntry.Time = s.StartTime
- level := logrus.InfoLevel
- if s.Status.Code != 0 {
- level = logrus.ErrorLevel
- baseEntry.Data[logrus.ErrorKey] = s.Status.Message
- }
- baseEntry.Log(level, "Span")
- }
|