diff --git a/crates/pscand-core/src/logging.rs b/crates/pscand-core/src/logging.rs index c6b4cd1..edfef0f 100644 --- a/crates/pscand-core/src/logging.rs +++ b/crates/pscand-core/src/logging.rs @@ -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) {