Go TraceId and SpanId Injection into Logs
This page describes how to configure spanId and traceId data injection into user logs in Go applications using the Logrus logging library. The process involves adding the necessary tracing dependencies and injecting the span_id
and trace_id
into relevant logs.
Logrus instrumentation​
- Import dependency:
import (
oteltrace "go.opentelemetry.io/otel/trace"
"github.com/sirupsen/logrus"
) - Configure logrus to format logs and extract span data by spanName:
func main() {
// Ensure logrus behaves like TTY is disabled
logrus.SetFormatter(&logrus.TextFormatter{
DisableColors: true,
FullTimestamp: true,
})
} - Prepare a function that will return logrus fields with
span_id
andtrace_id
:func LogrusFields(span oteltrace.Span) logrus.Fields {
return logrus.Fields{
"span_id": span.SpanContext().SpanID().String(),
"trace_id": span.SpanContext().TraceID().String(),
}
} - Use the fields function in your logging, whenever there's a tracing context available:
...
_, span := tracer.Start(ctx, "spanName", ...)
defer span.End()
logrus.WithFields(helper.LogrusFields(span)).Info("Some message...")
...