Skip to main content

syslog_too/logger/
rfc3164.rs

1//! Defines the RFC 5424 logger struct and trait implementations.
2
3use super::{Logger, LoggerBackend};
4use crate::Formatter3164;
5use log::{Level, Log, Metadata, Record};
6use std::io::Write;
7use std::sync::{Arc, Mutex};
8
9/// Logger struct for the RFC 3164 BSD syslog protocol.
10pub struct Logger3164 {
11    /// Create a new logger with the RFC5424 formatter.
12    logger: Arc<Mutex<Logger<LoggerBackend, Formatter3164>>>,
13}
14
15impl Logger3164 {
16    pub fn new(logger: Logger<LoggerBackend, Formatter3164>) -> Self {
17        Self {
18            logger: Arc::new(Mutex::new(logger)),
19        }
20    }
21}
22
23#[allow(unused_variables, unused_must_use)]
24impl Log for Logger3164 {
25    fn enabled(&self, metadata: &Metadata) -> bool {
26        metadata.level() <= log::max_level() && metadata.level() <= log::STATIC_MAX_LEVEL
27    }
28
29    fn log(&self, record: &Record) {
30        if self.enabled(record.metadata()) {
31            //FIXME: temporary patch to compile
32            let message = format!("{}", record.args());
33            let mut logger = self.logger.lock().unwrap();
34            match record.level() {
35                Level::Error => logger.err(message),
36                Level::Warn => logger.warning(message),
37                Level::Info => logger.info(message),
38                Level::Debug => logger.debug(message),
39                Level::Trace => logger.debug(message),
40            };
41        }
42    }
43
44    fn flush(&self) {
45        let _ = self.logger.lock().unwrap().backend.flush();
46    }
47}