solstice-ci/crates/common/src/telemetry.rs
Till Wegmueller a71f9cc7d1
Initial Commit
Signed-off-by: Till Wegmueller <toasterson@gmail.com>
2025-10-25 20:01:08 +02:00

28 lines
947 B
Rust

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<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));
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) })
}