|
| 1 | +use opentelemetry::{ |
| 2 | + trace::{Span, Tracer, TracerProvider as _}, |
| 3 | + KeyValue, |
| 4 | +}; |
| 5 | + |
| 6 | +use opentelemetry_sdk::{ |
| 7 | + resource, |
| 8 | + trace::{config, Config, TracerProvider}, |
| 9 | + Resource, |
| 10 | +}; |
| 11 | +use opentelemetry_stdout::SpanExporterBuilder; |
| 12 | +use tracing::span; |
| 13 | +use tracing_opentelemetry::OpenTelemetrySpanExt; |
| 14 | +use tracing_subscriber::{layer::SubscriberExt, Registry}; |
| 15 | + |
| 16 | +fn main() { |
| 17 | + println!("Hello, world!"); |
| 18 | + let stdout_exporter = SpanExporterBuilder::default() |
| 19 | + .with_encoder(|writer, data| { |
| 20 | + serde_json::to_writer_pretty(writer, &data).unwrap(); |
| 21 | + Ok(()) |
| 22 | + }) |
| 23 | + .build(); |
| 24 | + let provider = TracerProvider::builder() |
| 25 | + .with_config(Config::default().with_resource(Resource::new(vec![]))) |
| 26 | + .with_simple_exporter(stdout_exporter) |
| 27 | + .build(); |
| 28 | + let tracer = provider.tracer("tracing-opentelemetry"); |
| 29 | + let telemetry = tracing_opentelemetry::layer().with_tracer(tracer); |
| 30 | + let subscriber = Registry::default().with(telemetry); |
| 31 | + |
| 32 | + tracing::subscriber::with_default(subscriber, || { |
| 33 | + let tracer = provider.tracer("otel-tracing"); |
| 34 | + |
| 35 | + // this is the root span created using tokio tracing api |
| 36 | + let root = span!(tracing::Level::TRACE, "tokio-tracing-span-parent"); |
| 37 | + let _enter = root.enter(); |
| 38 | + |
| 39 | + // this is a child span created using tokio tracing api |
| 40 | + // this correctly parented to the root span |
| 41 | + let child = span!(tracing::Level::TRACE, "tokio-tracing-span-child"); |
| 42 | + let _enter_child = child.enter(); |
| 43 | + |
| 44 | + // this is another child, created using otel tracing api |
| 45 | + // but this is *NOT* parented to the above spans |
| 46 | + // demonstrating broken traces when mixing and matching tracing and opentelemetry apis |
| 47 | + // let mut span = tracer |
| 48 | + // .start_with_context("otel-tracing-span", &child.context()); |
| 49 | + let mut span = tracer |
| 50 | + .start("otel-tracing-span"); |
| 51 | + span.end(); |
| 52 | + }); |
| 53 | +} |
0 commit comments