From 772093279e1dd162a47e2dfe50d9a9ae0192d750 Mon Sep 17 00:00:00 2001 From: namilsk Date: Fri, 6 Mar 2026 22:42:10 +0300 Subject: implemented `SIGUSER/SIGINT/SIGTERM` handlers, graceful shutdown, logging to file --- init/src/log.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'init/src/log.rs') diff --git a/init/src/log.rs b/init/src/log.rs index 4c89dd1..207394b 100644 --- a/init/src/log.rs +++ b/init/src/log.rs @@ -1,11 +1,46 @@ +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)); } -- cgit v1.2.3