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) { fn write_to_journal(&self, entry: &LogEntry) {
let msg = entry.to_journal(); let priority = match entry.level {
let _ = std::process::Command::new("logger") LogLevel::Debug => 7,
.arg("-t") LogLevel::Info => 6,
.arg("pscand") LogLevel::Warn => 4,
.arg("-p") LogLevel::Error => 3,
.arg("info") LogLevel::Critical => 2,
.arg(msg) };
.spawn();
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) { fn write_to_file(&self, entry: &LogEntry) {
@ -263,17 +282,24 @@ impl RingBufferLogger {
LogLevel::Error => 3, LogLevel::Error => 3,
LogLevel::Critical => 2, LogLevel::Critical => 2,
}; };
let msg = format!(
"PSCAND_SOURCE={} PSCAND_EVENT={} PSCAND_MSG={}", let source = entry.source.clone();
entry.source, entry.event, entry.message let event = entry.event.clone();
); let msg = entry.message.clone();
let _ = std::process::Command::new("logger")
.arg("-t") // Write directly to systemd journal socket
.arg("pscand") std::thread::spawn(move || {
.arg("-p") use std::os::unix::net::UnixDatagram;
.arg(format!("user.{}", priority))
.arg(msg) let journal_msg = format!(
.spawn(); "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) { fn write_daemon_to_file(&self, entry: &DaemonLogEntry) {