{"record":{"id":"206c3aa616290f1b","repo":"stalwartlabs/stalwart","slug":"journald-not-supported-on-non-unix","errorCode":null,"errorMessage":"journald not supported on non-Unix","messagePattern":"journald not supported on non-Unix","errorType":"exception","errorClass":"io::Error(Other)","httpStatus":null,"severity":"error","filePath":"crates/common/src/telemetry/tracers/journald.rs","lineNumber":246,"sourceCode":"    ///\n    /// See [Journal Fields](https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html)\n    /// and [journalctl](https://www.freedesktop.org/software/systemd/man/journalctl.html)\n    /// for more information.\n    ///\n    /// Defaults to the file name of the executable of the current process, if any.\n    pub fn with_syslog_identifier(mut self, identifier: String) -> Self {\n        self.syslog_identifier = identifier;\n        self\n    }\n\n    /// Returns the syslog identifier in use.\n    pub fn syslog_identifier(&self) -> &str {\n        &self.syslog_identifier\n    }\n\n    #[cfg(not(unix))]\n    fn send_payload(&self, _opayload: &[u8]) -> io::Result<()> {\n        Err(io::Error::new(\n            io::ErrorKind::Other,\n            \"journald not supported on non-Unix\",\n        ))\n    }\n\n    #[cfg(unix)]\n    fn send_payload(&self, payload: &[u8]) -> io::Result<usize> {\n        self.socket\n            .send_to(payload, JOURNALD_PATH)\n            .or_else(|error| {\n                if Some(libc::EMSGSIZE) == error.raw_os_error() {\n                    self.send_large_payload(payload)\n                } else {\n                    Err(error)\n                }\n            })\n    }\n","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/stalwartlabs/stalwart/blob/e96200385781a6a9995a8b839ac27d6c75a983ee/crates/common/src/telemetry/tracers/journald.rs#L228-L264","documentation":"On non-Unix targets the journald tracer's send_payload is a stub that always returns an io::Error of kind Other. Since real payload delivery only exists under #[cfg(unix)], any event sent on a non-Unix build fails with this message.","triggerScenarios":"Calling send_payload (via send_event when emitting telemetry events) on a non-Unix build — every event dispatch returns this error.","commonSituations":"A binary compiled for Windows/macOS(non-unix target) still configured to log to journald; platform-gated config not applied at runtime.","solutions":["Reconfigure logging to a supported sink on non-Unix platforms.","Ensure the journald tracer is only enabled in Unix deployments.","Handle the io::Result error from send_event and fall back to another tracer."],"exampleFix":"// before\ntracer.send_event(evt).ok();\n// after\nif cfg!(not(unix)) { file_tracer.send_event(evt) } else { tracer.send_event(evt) }","handlingStrategy":"fallback","validationCode":"if cfg!(not(unix)) { use_file_tracer_instead(); }","typeGuard":"fn can_send_to_journald() -> bool { cfg!(unix) }","tryCatchPattern":"if tracer.send_event(event).is_err() {\n    fallback_tracer.send_event(event);\n}","preventionTips":["Gate journald logging behind #[cfg(unix)]/platform checks in your own glue code.","Configure OS-appropriate telemetry sinks per deployment.","Route event dispatch through an abstraction that picks the sink at runtime.","Alert on send_event failures so silent log loss is detected."],"tags":["logging","journald","platform","telemetry"],"backgroundTag":"unsupported-platform","analyzedSha":"e96200385781a6a9995a8b839ac27d6c75a983ee","analyzedAt":"2026-09-06T22:07:17.982Z","contentChangedAt":"2026-09-06T22:07:17.982Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}