use std::env; use std::io::IsTerminal; use tracing_subscriber::{EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt}; pub fn init_logging() { let is_terminal = std::io::stderr().is_terminal(); let show_time = env::var("NIX_JS_LOG_TIME") .map(|v| v == "1" || v.to_lowercase() == "true") .unwrap_or(false); let filter = EnvFilter::from_default_env(); let fmt_layer = fmt::layer() .with_target(true) .with_thread_ids(false) .with_thread_names(false) .with_file(false) .with_line_number(false) .with_ansi(is_terminal) .with_level(true); let fmt_layer = if show_time { fmt_layer.with_timer(fmt::time::uptime()).boxed() } else { fmt_layer.without_time().boxed() }; tracing_subscriber::registry() .with(filter) .with(fmt_layer) .init(); init_miette_handler(); } fn init_miette_handler() { let is_terminal = std::io::stderr().is_terminal(); miette::set_hook(Box::new(move |_| { Box::new( miette::MietteHandlerOpts::new() .terminal_links(is_terminal) .unicode(is_terminal) .color(is_terminal) .build(), ) })) .ok(); }