use ferrum_types::Result;
use std::io;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
pub fn setup_logging(
verbose: bool,
quiet: bool,
suppress_chat_template_warnings: bool,
) -> Result<()> {
let log_level = if quiet {
tracing::Level::ERROR
} else if verbose {
tracing::Level::DEBUG
} else {
tracing::Level::WARN
};
let filter = if verbose {
EnvFilter::new(log_level.to_string())
} else {
EnvFilter::try_from_default_env().unwrap_or_else(|_| {
let mut filter = format!(
"{},\
tokenizers=error,\
ferrum_models=info,\
ferrum_quantization=info,\
ferrum_engine::registry=info",
log_level
);
if suppress_chat_template_warnings {
filter.push_str(",ferrum_server::chat_template=error");
}
EnvFilter::new(filter)
})
};
tracing_subscriber::registry()
.with(filter)
.with(tracing_subscriber::fmt::layer().with_writer(io::stderr))
.init();
Ok(())
}