Skip to main content

otel_init/
lib.rs

1//!
2//! # Tracing OpenTelemetry Extra
3//!
4//! **Reference:** This crate is mainly organized based on the [official tracing-opentelemetry OTLP example](https://github.com/tokio-rs/tracing-opentelemetry/blob/v0.1.x/examples/opentelemetry-otlp.rs).
5//!
6//! This crate provides enhanced OpenTelemetry integration for tracing applications.
7//! It's based on the [tracing-opentelemetry examples](https://github.com/tokio-rs/tracing-opentelemetry/blob/v0.1.x/examples/opentelemetry-otlp.rs)
8//! and provides a clean, easy-to-use API for setting up OpenTelemetry tracing and metrics.
9//!
10//! ## Features
11//!
12//! - Easy OpenTelemetry initialization with OTLP exporter
13//! - Configurable sampling and resource attributes
14//! - Automatic cleanup with guard pattern
15//! - Support for both tracing and metrics
16//!
17//! ## Examples
18//!
19//! Basic usage with manual setup:
20//! ```rust,ignore
21//! use opentelemetry::KeyValue;
22//! use otel_init::{get_resource, init_tracer_provider, init_env_filter, init_tracing_subscriber, init_meter_provider, init_logger_provider};
23//! use tracing::Level;
24//!
25//! #[tokio::main]
26//! async fn main() -> anyhow::Result<()> {
27//!     // Create resource with service name and attributes
28//!     let resource = get_resource(
29//!         "my-service",
30//!         &[
31//!             KeyValue::new("environment", "production"),
32//!             KeyValue::new("version", "1.0.0"),
33//!         ],
34//!     );
35//!
36//!     // Initialize providers
37//!     let tracer_provider = init_tracer_provider(&resource, 1.0)?;
38//!     let meter_provider = init_meter_provider(&resource, 30)?;
39//!     let logger_provider = init_logger_provider(&resource)?;
40//!
41//!     // initialize tracing subscriber with otel layers
42//!     let _guard = init_tracing_subscriber(
43//!         "my-service",
44//!         init_env_filter(&Level::INFO),
45//!         vec![Box::new(tracing_subscriber::fmt::layer())],
46//!         tracer_provider,
47//!         meter_provider,
48//!         Some(logger_provider),
49//!     )?;
50//!     // Your application code here...
51//!
52//!     // Cleanup is handled automatically when the guard is dropped
53//!     Ok(())
54//! }
55//! ```
56
57mod guard;
58mod otel;
59mod resource;
60#[cfg(feature = "subscriber")]
61mod subscriber;
62
63// Re-exports
64pub use guard::OtelGuard;
65pub use otel::{init_logger_provider, init_meter_provider, init_tracer_provider};
66pub use resource::get_resource;
67#[cfg(feature = "subscriber")]
68pub use subscriber::{BoxLayer, init_env_filter, init_tracing_subscriber};
69
70// Re-exports opentelemetry crates
71pub use opentelemetry;
72pub use opentelemetry_sdk;
73pub use tracing_opentelemetry;
74
75// Macros module exports
76pub mod macros;