Skip to main content

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}