tracing_opentelemetry_ext/
lib.rs

1pub mod http;
2pub mod macros;
3pub mod masking;
4pub mod signal;
5pub mod tonic;
6use axum_tracing_opentelemetry::otlp::{identity, init_tracer};
7use opentelemetry::sdk::propagation::TraceContextPropagator;
8use opentelemetry::sdk::Resource;
9use opentelemetry::{global, KeyValue};
10pub use tower::ServiceBuilder;
11use tracing::subscriber::{set_global_default, SetGlobalDefaultError};
12use tracing_opentelemetry::layer;
13use tracing_subscriber::layer::SubscriberExt;
14use tracing_subscriber::{fmt, registry, EnvFilter};
15
16pub fn init_tracing(service_name: &String, environment_name: &String) -> Result<(), SetGlobalDefaultError> {
17    // Activate trace context propagation
18    global::set_text_map_propagator(TraceContextPropagator::new());
19
20    let service_name = KeyValue::new("service.name", service_name.to_string());
21    let environment_name = KeyValue::new("deployment.environment", environment_name.to_string());
22    let otel_resource = Resource::new(vec![service_name, environment_name]);
23    let otel_tracer = init_tracer(otel_resource, identity).unwrap();
24    let otel_layer = layer().with_tracer(otel_tracer);
25    let otel_filter = EnvFilter::builder().from_env_lossy();
26    let otel_stdout = fmt::layer().pretty().compact().with_target(false);
27    let subscriber = registry().with(otel_filter).with(otel_stdout).with(otel_layer);
28
29    set_global_default(subscriber)
30}