2025-10-25 20:00:32 +02:00
|
|
|
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<tracing_appender::non_blocking::WorkerGuard>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Initialize tracing. Console-only for now; OTEL can be wired later.
|
|
|
|
|
pub fn init_tracing(_service_name: &str) -> miette::Result<TelemetryGuard> {
|
|
|
|
|
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));
|
|
|
|
|
|
2025-11-01 14:56:46 +01:00
|
|
|
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
|
2025-10-25 20:00:32 +02:00
|
|
|
|
|
|
|
|
tracing_subscriber::registry()
|
|
|
|
|
.with(filter)
|
|
|
|
|
.with(fmt_layer)
|
|
|
|
|
.init();
|
|
|
|
|
|
2025-11-01 14:56:46 +01:00
|
|
|
Ok(TelemetryGuard {
|
|
|
|
|
_guard: Some(guard),
|
|
|
|
|
})
|
2025-10-25 20:00:32 +02:00
|
|
|
}
|