tracing_opentelemetry_ext/
http.rs1use axum::body::Body;
2use axum::http::Request;
3use axum::response::Response;
4pub use axum_tracing_opentelemetry::{opentelemetry_tracing_layer, opentelemetry_tracing_layer_grpc};
5use opentelemetry::propagation::TextMapPropagator;
6use opentelemetry::sdk::propagation::TraceContextPropagator;
7use opentelemetry_http::{HeaderExtractor, HeaderInjector};
8use tracing::Span;
9use tracing_opentelemetry::OpenTelemetrySpanExt;
10
11pub fn update_otel_name(req: Request<Body>) -> Request<Body> {
12 Span::current().record("otel.name", format!("{} {}", req.method(), req.uri()));
13 req
14}
15
16pub fn inject_trace_context<T>(mut res: Response<T>) -> Response<T> {
17 let ctx = Span::current().context();
18 TraceContextPropagator::new().inject_context(&ctx, &mut HeaderInjector(res.headers_mut()));
19 res
20}
21
22pub fn extract_trace_context<T>(req: &Request<T>) -> Span {
23 let context = TraceContextPropagator::new().extract(&HeaderExtractor(req.headers()));
24 let span = Span::current();
25 span.set_parent(context);
26 span
27}