use is_terminal::IsTerminal;
use std::{io, str::FromStr};
use tracing_subscriber::{EnvFilter, prelude::*};
use super::*;
pub fn initialize_terminal_logger(verbosity: u8) -> Result<()> {
let stdout_filter = parse_log_verbosity(verbosity)?;
let show_target = verbosity > 2;
let _ = tracing_subscriber::registry()
.with(
tracing_subscriber::fmt::Layer::default()
.with_ansi(io::stdout().is_terminal())
.with_target(show_target)
.with_filter(stdout_filter),
)
.try_init();
Ok(())
}
fn parse_log_verbosity(verbosity: u8) -> Result<EnvFilter> {
let default_log_str = match verbosity {
0 => "info",
1 => "debug",
2.. => "trace",
};
let filter = EnvFilter::from_str(default_log_str).unwrap();
let filter = if verbosity >= 3 {
filter.add_directive("leo_devnode_tcp=trace".parse().unwrap())
} else {
filter.add_directive("leo_devnode_tcp=off".parse().unwrap())
};
Ok(filter)
}