Skip to main content

nucleus/
telemetry.rs

1use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
2
3/// Initialize the tracing subscriber with env-filter.
4///
5/// RUST_LOG is respected but capped at `debug` to prevent `trace`-level
6/// output from leaking sensitive runtime data (syscall args, memory
7/// contents, etc.) in production.
8///
9/// L12: The level cap is enforced by wrapping the env_filter with a max_level
10/// directive, ensuring that even target-specific `RUST_LOG=trace` directives
11/// are capped at debug.
12pub fn init_tracing() {
13    // When RUST_LOG is set, respect it exactly (user controls verbosity).
14    // When unset, default to "info" with "nucleus=debug" for internal detail.
15    // The global cap at DEBUG prevents trace-level leaks in either case (L12).
16    let env_filter = match tracing_subscriber::EnvFilter::try_from_default_env() {
17        Ok(filter) => filter,
18        Err(_) => tracing_subscriber::EnvFilter::new("info")
19            .add_directive("nucleus=debug".parse().expect("valid tracing directive")),
20    };
21    let fmt_layer = tracing_subscriber::fmt::layer();
22
23    tracing_subscriber::registry()
24        .with(fmt_layer)
25        .with(env_filter)
26        .with(tracing_subscriber::filter::LevelFilter::DEBUG)
27        .init();
28}