syslog_too/logger/
rfc5424.rs1use super::{Logger, LoggerBackend};
4use crate::Formatter5424;
5use log::{Level, Log, Metadata, Record};
6use std::collections::BTreeMap;
7use std::io::Write;
8use std::sync::{Arc, Mutex};
9
10pub struct Logger5424 {
12 logger: Arc<Mutex<Logger<LoggerBackend, Formatter5424>>>,
13}
14
15impl Logger5424 {
16 pub fn new(logger: Logger<LoggerBackend, Formatter5424>) -> Self {
18 Self {
19 logger: Arc::new(Mutex::new(logger)),
20 }
21 }
22}
23
24impl Log for Logger5424 {
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 let msg = format!("{}", record.args());
33 let btree: BTreeMap<String, BTreeMap<String, String>> = BTreeMap::new();
34 let mut logger = self.logger.lock().unwrap();
35 let _ = match record.level() {
36 Level::Error => logger.err((1, btree.clone(), msg)),
37 Level::Warn => logger.warning((1, btree.clone(), msg)),
38 Level::Info => logger.info((1, btree.clone(), msg)),
39 Level::Debug => logger.debug((1, btree.clone(), msg)),
40 Level::Trace => logger.debug((1, btree, msg)),
41 };
42 }
43 }
44
45 fn flush(&self) {
46 let _ = self.logger.lock().unwrap().backend.flush();
47 }
48}