nullnet_liblogging/
syslog_logger.rs

1use syslog::{BasicLogger, Facility, Formatter3164};
2
3#[derive(Default)]
4pub(crate) struct SyslogLogger {
5    logger: Option<BasicLogger>,
6}
7
8impl SyslogLogger {
9    pub(crate) fn new(syslog_endpoint: bool) -> Self {
10        if !syslog_endpoint {
11            return Self::default();
12        }
13
14        let formatter = Formatter3164 {
15            facility: Facility::LOG_USER,
16            hostname: None,
17            process: String::from("nullnet"),
18            pid: std::process::id(),
19        };
20
21        let logger = BasicLogger::new(
22            syslog::unix(formatter).expect("could not connect to the local syslog socket"),
23        );
24
25        Self {
26            logger: Some(logger),
27        }
28    }
29}
30
31impl log::Log for SyslogLogger {
32    fn enabled(&self, metadata: &log::Metadata) -> bool {
33        self.logger
34            .as_ref()
35            .is_some_and(|logger| logger.enabled(metadata))
36    }
37
38    fn log(&self, record: &log::Record) {
39        if let Some(logger) = self.logger.as_ref() {
40            logger.log(record);
41        }
42    }
43
44    fn flush(&self) {
45        if let Some(logger) = self.logger.as_ref() {
46            logger.flush();
47        }
48    }
49}