Jaeger
Jaeger handles Uber-Trace-Id propagation without forcing a tracing dependency.
app.Use(middleware.Jaeger(func(c *zinc.Context, span middleware.JaegerSpan) error {
log.Printf("%s %s %s", span.TraceID, span.Operation, span.Duration)
return nil
}))
If a request already has an Uber-Trace-Id, Zinc keeps the trace ID and uses the incoming span ID as the parent span. Otherwise Zinc generates a new trace ID and span ID.
Inside handlers, read the current span with:
span, ok := middleware.JaegerCurrent(c)
Use JaegerWithConfig to customize operation names or timing.