use tracing_subscriber::EnvFilter;
pub(crate) fn init(verbose: u8) {
let env = std::env::var("KIROMI_AI_LOG").ok();
let filter = if let Some(s) = env {
EnvFilter::try_new(s).unwrap_or_else(|_| EnvFilter::new("info"))
} else {
let level = match verbose {
0 => "info",
1 => "debug",
_ => "trace",
};
EnvFilter::try_new(format!(
"warn,kiromi_ai_cli={level},kiromi_ai_memory={level}"
))
.unwrap_or_else(|_| EnvFilter::new("info"))
};
let _ = tracing_subscriber::fmt()
.with_env_filter(filter)
.with_writer(std::io::stderr)
.try_init();
}
#[cfg(test)]
#[allow(unsafe_code)]
mod tests {
use super::init;
#[test]
fn init_is_idempotent_at_each_verbosity() {
init(0);
init(1);
init(2);
}
#[test]
fn init_honours_kiromi_ai_log_env() {
unsafe {
std::env::set_var("KIROMI_AI_LOG", "info");
}
init(0);
unsafe {
std::env::remove_var("KIROMI_AI_LOG");
}
}
}