49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
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();
|
|
}
|