use opentelemetry::global;
use opentelemetry_sdk::trace::Tracer;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Registry};
pub fn init_tracer(service_name: &str) -> Result<(), Box<dyn std::error::Error>> {
let tracer = opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);
let env_filter = tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| "info".into());
Registry::default()
.with(env_filter)
.with(telemetry)
.with(tracing_subscriber::fmt::layer())
.try_init()?;
tracing::info!("OpenTelemetry tracing initialized for service: {}", service_name);
Ok(())
}
pub fn shutdown_tracer() {
global::shutdown_tracer_provider();
}