use crate::system::config::Config;
use crate::system::paths::get_log_dir;
use anyhow::{Context, Result};
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt};
pub fn init_logging(config: &Config) -> Result<()> {
if !config.logging.enabled {
return Ok(());
}
let level = match config.logging.level.as_str() {
"debug" => "debug",
"info" => "info",
"warn" => "warn",
"error" => "error",
_ => "info",
};
let filter = EnvFilter::try_new(format!("doum_cli={}", level))
.unwrap_or_else(|_| EnvFilter::new("info"));
let log_dir = get_log_dir()?;
if !log_dir.exists() {
std::fs::create_dir_all(&log_dir).context("Failed to create log directory")?;
}
let file_appender = RollingFileAppender::builder()
.rotation(Rotation::DAILY)
.filename_suffix("log")
.build(&log_dir)
.context("Failed to create log file appender")?;
tracing_subscriber::registry()
.with(filter)
.with(
fmt::layer()
.with_writer(file_appender)
.with_ansi(false)
.with_target(false),
)
.try_init()
.context("Failed to initialize logging subscriber")?;
tracing::info!("Configured logging with level: {}", level);
Ok(())
}