use std::path::PathBuf;
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::{fmt::format::FmtSpan, prelude::*, EnvFilter};
pub fn setup() -> Result<tracing_appender::non_blocking::WorkerGuard, Box<dyn std::error::Error>> {
let config_dir = dirs::home_dir()
.ok_or("home directory not found")?
.join(".config")
.join("chatti");
std::fs::create_dir_all(&config_dir)?;
let log_dir = config_dir.join("logs");
std::fs::create_dir_all(&log_dir)?;
let file_appender = RollingFileAppender::new(Rotation::DAILY, log_dir, "chatti.log");
let (non_blocking, guard) = tracing_appender::non_blocking(file_appender);
tracing_subscriber::registry()
.with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")))
.with(
tracing_subscriber::fmt::layer()
.with_writer(non_blocking)
.with_ansi(false)
.with_span_events(FmtSpan::FULL),
)
.init();
Ok(guard)
}
#[must_use]
pub fn get_log_file_path() -> PathBuf {
dirs::home_dir()
.unwrap_or_default()
.join(".config")
.join("chatti")
.join("logs")
}