use std::path::PathBuf;
use tracing_appender::non_blocking::WorkerGuard;
use tracing_subscriber::EnvFilter;
pub fn init() -> Option<WorkerGuard> {
let log_path = std::env::var_os("TREE_LOG").map(PathBuf::from);
if log_path.is_none() && std::env::var_os("RUST_LOG").is_none() {
return None;
}
let path = log_path.unwrap_or_else(|| PathBuf::from("tree.log"));
let file_name = path.file_name()?.to_owned();
let dir = match path.parent() {
Some(p) if !p.as_os_str().is_empty() => p.to_path_buf(),
_ => PathBuf::from("."),
};
let (writer, guard) =
tracing_appender::non_blocking(tracing_appender::rolling::never(dir, file_name));
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
tracing_subscriber::fmt()
.with_env_filter(filter)
.with_writer(writer)
.with_ansi(false)
.init();
Some(guard)
}