Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
uses: taiki-e/install-action@cargo-hack
# Old opentelemetry features group to improve performance
- name: test
run: cargo hack test --feature-powerset -p reqwest-tracing --exclude-features opentelemetry_0_20 --group-features opentelemetry_0_21,opentelemetry_0_22,opentelemetry_0_23,opentelemetry_0_24,opentelemetry_0_25,opentelemetry_0_26,opentelemetry_0_27
run: cargo hack test --feature-powerset -p reqwest-tracing --exclude-features opentelemetry_0_20,opentelemetry_0_21 --group-features opentelemetry_0_22,opentelemetry_0_23,opentelemetry_0_24,opentelemetry_0_25,opentelemetry_0_26,opentelemetry_0_27,opentelemetry_0_28

rustfmt:
name: Rustfmt
Expand Down
4 changes: 4 additions & 0 deletions reqwest-tracing/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- Added support for OpenTelemetry `0.31`

## [0.6.0] - 2026-01-07

Expand Down
5 changes: 5 additions & 0 deletions reqwest-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ opentelemetry_0_27 = ["opentelemetry_0_27_pkg", "tracing-opentelemetry_0_28_pkg"
opentelemetry_0_28 = ["opentelemetry_0_28_pkg", "tracing-opentelemetry_0_29_pkg"]
opentelemetry_0_29 = ["opentelemetry_0_29_pkg", "tracing-opentelemetry_0_30_pkg"]
opentelemetry_0_30 = ["opentelemetry_0_30_pkg", "tracing-opentelemetry_0_31_pkg"]
opentelemetry_0_31 = ["opentelemetry_0_31_pkg", "tracing-opentelemetry_0_32_pkg"]
# This feature ensures that both the old (deprecated) and new attributes are published simultaneously.
# By doing so, we maintain backward compatibility, allowing existing code that relies on the old attributes
# to continue functioning while encouraging the transition to the new attributes.
Expand All @@ -47,6 +48,7 @@ opentelemetry_0_27_pkg = { package = "opentelemetry", version = "0.27.0", option
opentelemetry_0_28_pkg = { package = "opentelemetry", version = "0.28.0", optional = true }
opentelemetry_0_29_pkg = { package = "opentelemetry", version = "0.29.0", optional = true }
opentelemetry_0_30_pkg = { package = "opentelemetry", version = "0.30.0", optional = true }
opentelemetry_0_31_pkg = { package = "opentelemetry", version = "0.31.0", optional = true }
tracing-opentelemetry_0_21_pkg = { package = "tracing-opentelemetry", version = "0.21.0", optional = true }
tracing-opentelemetry_0_22_pkg = { package = "tracing-opentelemetry", version = "0.22.0", optional = true }
tracing-opentelemetry_0_23_pkg = { package = "tracing-opentelemetry", version = "0.23.0", optional = true }
Expand All @@ -58,6 +60,7 @@ tracing-opentelemetry_0_28_pkg = { package = "tracing-opentelemetry", version =
tracing-opentelemetry_0_29_pkg = { package = "tracing-opentelemetry", version = "0.29.0", optional = true }
tracing-opentelemetry_0_30_pkg = { package = "tracing-opentelemetry", version = "0.30.0", optional = true }
tracing-opentelemetry_0_31_pkg = { package = "tracing-opentelemetry", version = "0.31.0", optional = true }
tracing-opentelemetry_0_32_pkg = { package = "tracing-opentelemetry", version = "0.32.1", optional = true }

[target.'cfg(target_arch = "wasm32")'.dependencies]
getrandom = { version = "0.2.0", features = ["js"] }
Expand All @@ -78,8 +81,10 @@ opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", fe
opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = ["trace"] }
opentelemetry_sdk_0_29 = { package = "opentelemetry_sdk", version = "0.29.0", features = ["trace"] }
opentelemetry_sdk_0_30 = { package = "opentelemetry_sdk", version = "0.30.0", features = ["trace"] }
opentelemetry_sdk_0_31 = { package = "opentelemetry_sdk", version = "0.31.0", features = ["trace"] }
opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = ["trace"] }
opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = ["trace"] }
opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = ["trace"] }
opentelemetry_stdout_0_4 = { package = "opentelemetry-stdout", version = "0.4.0", features = ["trace"] }
opentelemetry_stdout_0_5 = { package = "opentelemetry-stdout", version = "0.5.0", features = ["trace"] }
opentelemetry_stdout_0_31 = { package = "opentelemetry-stdout", version = "0.31.0", features = ["trace"] }
1 change: 1 addition & 0 deletions reqwest-tracing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ mod middleware;
feature = "opentelemetry_0_28",
feature = "opentelemetry_0_29",
feature = "opentelemetry_0_30",
feature = "opentelemetry_0_31",
))]
mod otel;
mod reqwest_otel_span_builder;
Expand Down
1 change: 1 addition & 0 deletions reqwest-tracing/src/middleware.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ where
feature = "opentelemetry_0_28",
feature = "opentelemetry_0_29",
feature = "opentelemetry_0_30",
feature = "opentelemetry_0_31",
))]
let req = if extensions.get::<crate::DisableOtelPropagation>().is_none() {
// Adds tracing headers to the given request to propagate the OpenTelemetry context to downstream revivers of the request.
Expand Down
30 changes: 30 additions & 0 deletions reqwest-tracing/src/otel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,13 @@ pub fn inject_opentelemetry_context_into_request(mut request: Request) -> Reques
injector.inject_context(&context, &mut RequestCarrier::new(&mut request))
});

#[cfg(feature = "opentelemetry_0_31")]
opentelemetry_0_31_pkg::global::get_text_map_propagator(|injector| {
use tracing_opentelemetry_0_32_pkg::OpenTelemetrySpanExt;
let context = Span::current().context();
injector.inject_context(&context, &mut RequestCarrier::new(&mut request))
});

request
}

Expand Down Expand Up @@ -186,6 +193,13 @@ impl opentelemetry_0_30_pkg::propagation::Injector for RequestCarrier<'_> {
}
}

#[cfg(feature = "opentelemetry_0_31")]
impl opentelemetry_0_31_pkg::propagation::Injector for RequestCarrier<'_> {
fn set(&mut self, key: &str, value: String) {
self.set_inner(key, value)
}
}

#[cfg(test)]
mod test {
use std::sync::OnceLock;
Expand Down Expand Up @@ -417,6 +431,22 @@ mod test {
subscriber.with(telemetry)
};

#[cfg(feature = "opentelemetry_0_31")]
let subscriber = {
use opentelemetry_0_31_pkg::trace::TracerProvider;

let provider = opentelemetry_sdk_0_31::trace::SdkTracerProvider::builder().build();

let tracer = provider.tracer("reqwest");
opentelemetry_0_31_pkg::global::set_tracer_provider(provider);
opentelemetry_0_31_pkg::global::set_text_map_propagator(
opentelemetry_sdk_0_31::propagation::TraceContextPropagator::new(),
);

let telemetry = tracing_opentelemetry_0_32_pkg::layer().with_tracer(tracer);
subscriber.with(telemetry)
};

tracing::subscriber::set_global_default(subscriber).unwrap();
});

Expand Down
Loading