horto_os_ui_shared/tracing_init.rs
1//! Process-wide `tracing-subscriber` install for Horto binaries.
2
3use std::io;
4
5/// Install a fmt subscriber on stderr.
6///
7/// Reads `RUST_LOG` when set; otherwise uses `default_filter` (e.g. `"info"`).
8/// Later calls are no-ops (`try_init`).
9///
10/// TUI must not call this: step output belongs in the Logs pane via
11/// [`crate::HostContext::logs`], not a stderr fmt layer.
12pub fn init_tracing(default_filter: &str) {
13 let filter = tracing_subscriber::EnvFilter::try_from_default_env()
14 .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(default_filter));
15 let _ = tracing_subscriber::fmt()
16 .with_env_filter(filter)
17 .with_writer(io::stderr)
18 .try_init();
19}
20
21#[cfg(test)]
22mod tests {
23 #[test]
24 fn init_tracing_installs_and_second_call_is_noop() {
25 super::init_tracing("info");
26 // Global subscriber already set; must not panic.
27 super::init_tracing("debug");
28 }
29}