summaryrefslogtreecommitdiff
path: root/init/src/log.rs
diff options
context:
space:
mode:
Diffstat (limited to 'init/src/log.rs')
-rw-r--r--init/src/log.rs35
1 files changed, 35 insertions, 0 deletions
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<Option<std::fs::File>> = Mutex::new(None);
+
+/// Инициализирует файл логирования. Должен вызываться один раз при старте.
+pub fn init_logging() -> Result<(), Box<dyn std::error::Error>> {
+ 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));
}