Skip to content

Instantly share code, notes, and snippets.

@alessandrobologna
Created October 2, 2024 15:59
Show Gist options
  • Select an option

  • Save alessandrobologna/2308038d8c67f443ba3c44c0e1efc694 to your computer and use it in GitHub Desktop.

Select an option

Save alessandrobologna/2308038d8c67f443ba3c44c0e1efc694 to your computer and use it in GitHub Desktop.
rust otel 0.26.0 tracing opentelemetry
Compiling otel26 v0.1.0 (/Users/abologna/git/rust/otel26)
error[E0277]: the trait bound `opentelemetry_sdk::trace::Tracer: opentelemetry::trace::tracer::Tracer` is not satisfied
--> src/main.rs:15:64
|
15 | let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
| ----------- ^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry_sdk::trace::Tracer`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `opentelemetry::trace::tracer::Tracer`:
opentelemetry::global::trace::BoxedTracer
opentelemetry::trace::noop::NoopTracer
opentelemetry_sdk::trace::tracer::Tracer
note: required by a bound in `OpenTelemetryLayer::<S, T>::with_tracer`
--> /Users/abologna/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-opentelemetry-0.26.0/src/layer.rs:591:17
|
589 | pub fn with_tracer<Tracer>(self, tracer: Tracer) -> OpenTelemetryLayer<S, Tracer>
| ----------- required by a bound in this associated function
590 | where
591 | Tracer: otel::Tracer + PreSampledTracer + 'static,
| ^^^^^^^^^^^^ required by this bound in `OpenTelemetryLayer::<S, T>::with_tracer`
error[E0277]: the trait bound `opentelemetry_sdk::trace::Tracer: PreSampledTracer` is not satisfied
--> src/main.rs:15:64
|
15 | let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
| ----------- ^^^^^^ the trait `PreSampledTracer` is not implemented for `opentelemetry_sdk::trace::Tracer`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `PreSampledTracer`:
opentelemetry::trace::noop::NoopTracer
opentelemetry_sdk::trace::tracer::Tracer
note: required by a bound in `OpenTelemetryLayer::<S, T>::with_tracer`
--> /Users/abologna/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-opentelemetry-0.26.0/src/layer.rs:591:32
|
589 | pub fn with_tracer<Tracer>(self, tracer: Tracer) -> OpenTelemetryLayer<S, Tracer>
| ----------- required by a bound in this associated function
590 | where
591 | Tracer: otel::Tracer + PreSampledTracer + 'static,
| ^^^^^^^^^^^^^^^^ required by this bound in `OpenTelemetryLayer::<S, T>::with_tracer`
error[E0277]: the trait bound `opentelemetry_sdk::trace::Tracer: opentelemetry::trace::tracer::Tracer` is not satisfied
--> src/main.rs:19:47
|
19 | let subscriber = Registry::default().with(telemetry);
| ---- ^^^^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry_sdk::trace::Tracer`, which is required by `OpenTelemetryLayer<_, opentelemetry_sdk::trace::Tracer>: __tracing_subscriber_Layer<Registry>`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `opentelemetry::trace::tracer::Tracer`:
opentelemetry::global::trace::BoxedTracer
opentelemetry::trace::noop::NoopTracer
opentelemetry_sdk::trace::tracer::Tracer
= note: required for `OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>` to implement `__tracing_subscriber_Layer<Registry>`
note: required by a bound in `with`
--> /Users/abologna/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-subscriber-0.3.18/src/layer/mod.rs:1503:12
|
1501 | fn with<L>(self, layer: L) -> Layered<L, Self>
| ---- required by a bound in this associated function
1502 | where
1503 | L: Layer<Self>,
| ^^^^^^^^^^^ required by this bound in `__tracing_subscriber_SubscriberExt::with`
error[E0277]: the trait bound `opentelemetry_sdk::trace::Tracer: PreSampledTracer` is not satisfied
--> src/main.rs:19:47
|
19 | let subscriber = Registry::default().with(telemetry);
| ---- ^^^^^^^^^ the trait `PreSampledTracer` is not implemented for `opentelemetry_sdk::trace::Tracer`, which is required by `OpenTelemetryLayer<_, opentelemetry_sdk::trace::Tracer>: __tracing_subscriber_Layer<Registry>`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `PreSampledTracer`:
opentelemetry::trace::noop::NoopTracer
opentelemetry_sdk::trace::tracer::Tracer
= note: required for `OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>` to implement `__tracing_subscriber_Layer<Registry>`
note: required by a bound in `with`
--> /Users/abologna/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-subscriber-0.3.18/src/layer/mod.rs:1503:12
|
1501 | fn with<L>(self, layer: L) -> Layered<L, Self>
| ---- required by a bound in this associated function
1502 | where
1503 | L: Layer<Self>,
| ^^^^^^^^^^^ required by this bound in `__tracing_subscriber_SubscriberExt::with`
error[E0277]: the trait bound `opentelemetry_sdk::trace::Tracer: opentelemetry::trace::tracer::Tracer` is not satisfied
--> src/main.rs:22:39
|
22 | tracing::subscriber::with_default(subscriber, || {
| --------------------------------- ^^^^^^^^^^ the trait `opentelemetry::trace::tracer::Tracer` is not implemented for `opentelemetry_sdk::trace::Tracer`, which is required by `Layered<OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>, Registry>: tracing::Subscriber`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `opentelemetry::trace::tracer::Tracer`:
opentelemetry::global::trace::BoxedTracer
opentelemetry::trace::noop::NoopTracer
opentelemetry_sdk::trace::tracer::Tracer
= note: required for `OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>` to implement `__tracing_subscriber_Layer<Registry>`
= note: required for `Layered<OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>, Registry>` to implement `tracing::Subscriber`
note: required by a bound in `tracing::subscriber::with_default`
--> /Users/abologna/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-0.1.40/src/subscriber.rs:22:8
|
20 | pub fn with_default<T, S>(subscriber: S, f: impl FnOnce() -> T) -> T
| ------------ required by a bound in this function
21 | where
22 | S: Subscriber + Send + Sync + 'static,
| ^^^^^^^^^^ required by this bound in `with_default`
error[E0277]: the trait bound `opentelemetry_sdk::trace::Tracer: PreSampledTracer` is not satisfied
--> src/main.rs:22:39
|
22 | tracing::subscriber::with_default(subscriber, || {
| --------------------------------- ^^^^^^^^^^ the trait `PreSampledTracer` is not implemented for `opentelemetry_sdk::trace::Tracer`, which is required by `Layered<OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>, Registry>: tracing::Subscriber`
| |
| required by a bound introduced by this call
|
= help: the following other types implement trait `PreSampledTracer`:
opentelemetry::trace::noop::NoopTracer
opentelemetry_sdk::trace::tracer::Tracer
= note: required for `OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>` to implement `__tracing_subscriber_Layer<Registry>`
= note: required for `Layered<OpenTelemetryLayer<Registry, opentelemetry_sdk::trace::Tracer>, Registry>` to implement `tracing::Subscriber`
note: required by a bound in `tracing::subscriber::with_default`
--> /Users/abologna/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tracing-0.1.40/src/subscriber.rs:22:8
|
20 | pub fn with_default<T, S>(subscriber: S, f: impl FnOnce() -> T) -> T
| ------------ required by a bound in this function
21 | where
22 | S: Subscriber + Send + Sync + 'static,
| ^^^^^^^^^^ required by this bound in `with_default`
warning: unused import: `Tracer`
--> src/main.rs:3:32
|
3 | use opentelemetry::trace::{Tracer, TracerProvider as _};
| ^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
For more information about this error, try `rustc --explain E0277`.
warning: `otel26` (bin "otel26") generated 1 warning
error: could not compile `otel26` (bin "otel26") due to 6 previous errors; 1 warning emitted
[package]
name = "otel26"
version = "0.1.0"
edition = "2021"
[dependencies]
opentelemetry = "0.26.0"
opentelemetry-stdout = "0.26.0"
opentelemetry_sdk = { version = "0.26.0", features = ["trace"] }
tracing = "0.1.40"
tracing-opentelemetry = "0.26.0"
tracing-subscriber = "0.3.18"
fn main() {
use opentelemetry_sdk::trace::TracerProvider;
use opentelemetry::trace::{Tracer, TracerProvider as _};
use tracing::{error, span};
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::Registry;
// Create a new OpenTelemetry trace pipeline that prints to stdout
let provider = TracerProvider::builder()
.with_simple_exporter(opentelemetry_stdout::SpanExporter::default())
.build();
let tracer = provider.tracer("readme_example");
// Create a tracing layer with the configured tracer
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
// Use the tracing subscriber `Registry`, or any other subscriber
// that impls `LookupSpan`
let subscriber = Registry::default().with(telemetry);
// Trace executed code
tracing::subscriber::with_default(subscriber, || {
// Spans will be sent to the configured OpenTelemetry exporter
let root = span!(tracing::Level::TRACE, "app_start", work_units = 2);
let _enter = root.enter();
error!("This event will be logged in the root span.");
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment