// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 //! Process-wide tracing subscriber setup for the gateway. //! //! This module routes gateway logs and spans to configured diagnostic outputs. //! `OpenShell` product telemetry collected for maintainers is handled by //! [`crate::telemetry`]. use opentelemetry_sdk::trace::SdkTracerProvider; use tracing_subscriber::EnvFilter; use tracing_subscriber::prelude::*; use crate::config_file::OtlpConfig; use crate::otel_tracing::SetupError; use crate::tracing_bus::TracingLogBus; pub struct TracingHandle { tracer_provider: Option, } impl TracingHandle { pub fn shutdown(&self) { if let Some(provider) = &self.tracer_provider && let Err(err) = provider.shutdown() { tracing::warn!(error = %err, "OTLP tracer provider shutdown failed"); } } } pub fn install( env_filter: EnvFilter, tracing_log_bus: &TracingLogBus, otlp_config: Option<&OtlpConfig>, ) -> (TracingHandle, Option) { let (tracer_provider, setup_error) = crate::otel_tracing::provider_for(otlp_config); tracing_subscriber::registry() .with(env_filter) .with(tracing_subscriber::fmt::layer()) .with(tracing_log_bus.layer()) .with(tracer_provider.as_ref().map(crate::otel_tracing::layer)) .init(); (TracingHandle { tracer_provider }, setup_error) }