nullnet-liblogging 0.3.0

Logging library for NullNet
Documentation
use syslog::{BasicLogger, Facility, Formatter3164};

#[derive(Default)]
pub(crate) struct SyslogLogger {
    logger: Option<BasicLogger>,
}

impl SyslogLogger {
    pub(crate) fn new(syslog_endpoint: bool) -> Self {
        if !syslog_endpoint {
            return Self::default();
        }

        let formatter = Formatter3164 {
            facility: Facility::LOG_USER,
            hostname: None,
            process: String::from("nullnet"),
            pid: std::process::id(),
        };

        let logger = BasicLogger::new(
            syslog::unix(formatter).expect("could not connect to the local syslog socket"),
        );

        Self {
            logger: Some(logger),
        }
    }
}

impl log::Log for SyslogLogger {
    fn enabled(&self, metadata: &log::Metadata) -> bool {
        self.logger
            .as_ref()
            .is_some_and(|logger| logger.enabled(metadata))
    }

    fn log(&self, record: &log::Record) {
        if let Some(logger) = self.logger.as_ref() {
            logger.log(record);
        }
    }

    fn flush(&self) {
        if let Some(logger) = self.logger.as_ref() {
            logger.flush();
        }
    }
}