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;