use std::{fs, panic, path::Path};
use tracing_subscriber::{fmt, EnvFilter};
pub fn setup_tracing() {
archive_existing_log();
let log_file =
std::fs::File::create("logs/price_printer.log").expect("Failed to create log file");
let subscriber = fmt()
.with_writer(log_file)
.with_env_filter(EnvFilter::from_default_env())
.finish();
tracing::subscriber::set_global_default(subscriber).unwrap();
panic::set_hook(Box::new(|panic_info| {
let message = if let Some(s) = panic_info
.payload()
.downcast_ref::<&str>()
{
s.to_string()
} else if let Some(s) = panic_info
.payload()
.downcast_ref::<String>()
{
s.clone()
} else {
"Unknown panic".to_string()
};
tracing::error!(message = %message);
}));
}
fn archive_existing_log() {
let log_path = Path::new("logs/price_printer.log");
let archive_path = Path::new("logs/price_printer_old.log");
if let Some(parent) = log_path.parent() {
fs::create_dir_all(parent).ok();
}
if log_path.exists() {
if archive_path.exists() {
fs::remove_file(archive_path).ok();
}
if let Err(e) = fs::rename(log_path, archive_path) {
eprintln!("Warning: Failed to archive existing log: {e}");
}
}
}