pscand-core: add async journal logging

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I79b95db2e5ea4f73d6b589397265d4c66a6a6964
This commit is contained in:
raf 2026-02-19 00:26:44 +03:00
commit 55403ca407
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -237,14 +237,33 @@ impl RingBufferLogger {
}
fn write_to_journal(&self, entry: &LogEntry) {
let msg = entry.to_journal();
let _ = std::process::Command::new("logger")
.arg("-t")
.arg("pscand")
.arg("-p")
.arg("info")
.arg(msg)
.spawn();
let priority = match entry.level {
LogLevel::Debug => 7,
LogLevel::Info => 6,
LogLevel::Warn => 4,
LogLevel::Error => 3,
LogLevel::Critical => 2,
};
let msg = entry
.message
.clone()
.unwrap_or_else(|| "collection completed".to_string());
let scanner = entry.scanner.clone();
// Write directly to systemd journal socket
std::thread::spawn(move || {
use std::os::unix::net::UnixDatagram;
let journal_msg = format!(
"PRIORITY={}\nSYSLOG_IDENTIFIER=pscand\nPSCAND_SCANNER={}\nMESSAGE={}\n",
priority, scanner, msg
);
if let Ok(sock) = UnixDatagram::unbound() {
let _ = sock.send_to(journal_msg.as_bytes(), "/run/systemd/journal/socket");
}
});
}
fn write_to_file(&self, entry: &LogEntry) {
@ -263,17 +282,24 @@ impl RingBufferLogger {
LogLevel::Error => 3,
LogLevel::Critical => 2,
};
let msg = format!(
"PSCAND_SOURCE={} PSCAND_EVENT={} PSCAND_MSG={}",
entry.source, entry.event, entry.message
);
let _ = std::process::Command::new("logger")
.arg("-t")
.arg("pscand")
.arg("-p")
.arg(format!("user.{}", priority))
.arg(msg)
.spawn();
let source = entry.source.clone();
let event = entry.event.clone();
let msg = entry.message.clone();
// Write directly to systemd journal socket
std::thread::spawn(move || {
use std::os::unix::net::UnixDatagram;
let journal_msg = format!(
"PRIORITY={}\nSYSLOG_IDENTIFIER=pscand\nPSCAND_SOURCE={}\nPSCAND_EVENT={}\nMESSAGE={}\n",
priority, source, event, msg
);
if let Ok(sock) = UnixDatagram::unbound() {
let _ = sock.send_to(journal_msg.as_bytes(), "/run/systemd/journal/socket");
}
});
}
fn write_daemon_to_file(&self, entry: &DaemonLogEntry) {