nullnet_liblogging/
syslog_logger.rs1use 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}