use opentelemetry::trace::TracerProvider as _;
use opentelemetry_sdk::Resource;
use opentelemetry_sdk::trace::SdkTracerProvider;
use tracing_subscriber::Layer;
use super::logger::BoxedLayer;
pub fn build_layer(service_name: &str) -> anyhow::Result<(BoxedLayer, SdkTracerProvider)> {
let exporter = opentelemetry_otlp::SpanExporter::builder()
.with_http()
.build()?;
let provider = SdkTracerProvider::builder()
.with_batch_exporter(exporter)
.with_resource(
Resource::builder()
.with_service_name(service_name.to_string())
.build(),
)
.build();
let tracer = provider.tracer(service_name.to_string());
let layer = tracing_opentelemetry::layer().with_tracer(tracer).boxed();
Ok((layer, provider))
}
pub fn shutdown_tracing(provider: SdkTracerProvider) {
if let Err(err) = provider.shutdown() {
tracing::error!(error = %err, "failed to shut down OpenTelemetry tracer provider");
}
}