use std::fs::OpenOptions; use std::io::Write; use std::sync::Mutex; const LOG_FILE_PATH: &str = "/var/log/vigil.log"; static LOG_FILE: Mutex> = Mutex::new(None); pub fn init_logging() -> Result<(), Box> { let file = OpenOptions::new() .create(true) .append(true) .open(LOG_FILE_PATH)?; let mut guard = LOG_FILE.lock().map_err(|e| e.to_string())?; *guard = Some(file); Ok(()) } fn write_to_log(message: &str) { let mut guard = match LOG_FILE.lock() { Ok(g) => g, Err(poisoned) => poisoned.into_inner(), }; if let Some(ref mut file) = *guard { let _ = writeln!(file, "{}", message); let _ = file.flush(); } } pub fn log_critical_error(message: &str) { println!("\x1b[31m * \x1b[0m {}", message); write_to_log(&format!("[CRITICAL] {}", message)); } pub fn log_warning(message: &str) { println!("\x1b[33m * \x1b[0m {}", message); write_to_log(&format!("[WARNING] {}", message)); } pub fn log_success(message: &str) { println!("\x1b[32m * \x1b[0m {}", message); write_to_log(&format!("[OK] {}", message)); }