42 lines
1007 B
Rust
42 lines
1007 B
Rust
|
use crate::app_config::AppConfig;
|
||
|
use crate::devices::device::DeviceId;
|
||
|
use crate::logs::log_entry::LogEntry;
|
||
|
use crate::logs::severity::LogSeverity;
|
||
|
use crate::utils::time_utils::{curr_day_number, time_secs};
|
||
|
use fs4::fs_std::FileExt;
|
||
|
use std::fs::OpenOptions;
|
||
|
use std::io::{Seek, SeekFrom, Write};
|
||
|
|
||
|
pub fn save_log(
|
||
|
device: Option<&DeviceId>,
|
||
|
severity: LogSeverity,
|
||
|
message: String,
|
||
|
) -> anyhow::Result<()> {
|
||
|
let log_path = AppConfig::get().log_of_day(curr_day_number());
|
||
|
|
||
|
let mut file = OpenOptions::new()
|
||
|
.append(true)
|
||
|
.create(true)
|
||
|
.open(&log_path)?;
|
||
|
|
||
|
file.lock_exclusive()?;
|
||
|
file.seek(SeekFrom::End(0))?;
|
||
|
file.write_all(
|
||
|
format!(
|
||
|
"{}\n",
|
||
|
(LogEntry {
|
||
|
device_id: device.cloned(),
|
||
|
time: time_secs(),
|
||
|
severity,
|
||
|
message,
|
||
|
})
|
||
|
.serialize()?
|
||
|
)
|
||
|
.as_bytes(),
|
||
|
)?;
|
||
|
file.flush()?;
|
||
|
file.unlock()?;
|
||
|
|
||
|
Ok(())
|
||
|
}
|