nullnet_liblogging/
syslog_logger.rs1use syslog::{BasicLogger, Facility, Formatter3164};
2
3pub enum SyslogEndpoint {
5 Local,
7 Remote(String),
9}
10
11pub(crate) struct SyslogLogger {
12 logger: BasicLogger,
13}
14
15impl SyslogLogger {
16 pub(crate) fn new(syslog_endpoint: SyslogEndpoint, process_name: &str) -> Self {
17 let formatter = Formatter3164 {
18 facility: Facility::LOG_USER,
19 hostname: None,
20 process: process_name.to_string(),
21 pid: std::process::id(),
22 };
23
24 let logger = BasicLogger::new(
25 match syslog_endpoint {
26 SyslogEndpoint::Local => syslog::unix(formatter),
27 SyslogEndpoint::Remote(server) => syslog::tcp(formatter, server),
28 }
29 .expect("could not connect to syslog server"),
30 );
31
32 Self { logger }
33 }
34}
35
36impl log::Log for SyslogLogger {
37 fn enabled(&self, metadata: &log::Metadata) -> bool {
38 self.logger.enabled(metadata)
39 }
40
41 fn log(&self, record: &log::Record) {
42 self.logger.log(record);
43 }
44
45 fn flush(&self) {
46 self.logger.flush();
47 }
48}