use miette::IntoDiagnostic; use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt}; /// Guard that keeps non-blocking writer alive and allows flushing on drop pub struct TelemetryGuard { // Drop to flush writer. _guard: Option, } /// Initialize tracing. Console-only for now; OTEL can be wired later. pub fn init_tracing(_service_name: &str) -> miette::Result { let (nb_writer, guard) = tracing_appender::non_blocking(std::io::stderr()); let fmt_layer = fmt::layer() .with_target(false) .with_writer(nb_writer) .with_ansi(atty::is(atty::Stream::Stderr)); let filter = EnvFilter::try_from_default_env() .unwrap_or_else(|_| EnvFilter::new("info")); tracing_subscriber::registry() .with(filter) .with(fmt_layer) .init(); Ok(TelemetryGuard { _guard: Some(guard) }) }