1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
//! # Tracing OpenTelemetry //! //! [`tracing`] is a framework for instrumenting Rust programs to collect //! structured, event-based diagnostic information. This crate provides a layer //! that connects spans from multiple systems into a trace and emits them to //! [OpenTelemetry]-compatible distributed tracing systems for processing and //! visualization. //! //! [OpenTelemetry]: https://opentelemetry.io //! [`tracing`]: https://github.com/tokio-rs/tracing //! //! ## Examples //! //! ``` //! use opentelemetry::{api::Provider, sdk}; //! use tracing::{error, span}; //! use tracing_subscriber::layer::SubscriberExt; //! use tracing_subscriber::Registry; //! //! // Create a new tracer //! let tracer = sdk::Provider::default().get_tracer("service_name"); //! //! // Create a new OpenTelemetry tracing layer //! let telemetry = tracing_opentelemetry::layer().with_tracer(tracer); //! //! let subscriber = Registry::default().with(telemetry); //! //! // Trace executed code //! tracing::subscriber::with_default(subscriber, || { //! 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."); //! }); //! ``` #![deny(unreachable_pub)] #![cfg_attr(test, deny(warnings))] /// Implementation of the trace::Layer as a source of OpenTelemetry data. mod layer; /// Span extension which enables OpenTelemetry context management. mod span_ext; pub use layer::{layer, OpenTelemetryLayer}; pub use span_ext::OpenTelemetrySpanExt;