diff --git a/src/lib.rs b/src/lib.rs index 945aba9..4f5b4ba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -54,6 +54,7 @@ extern crate log; extern crate time; +use std::collections::BTreeMap; use std::env; use std::fmt::{self, Arguments}; use std::io::{self, BufWriter, Write}; @@ -366,6 +367,44 @@ impl Log for BasicLogger { } } +pub struct Logger5424 { + logger: Arc>>, +} + +impl Logger5424 { + pub fn new(logger: Logger) -> Logger5424 { + Logger5424 { + logger: Arc::new(Mutex::new(logger)), + } + } +} + +impl Log for Logger5424 { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= log::max_level() && metadata.level() <= log::STATIC_MAX_LEVEL + } + + fn log(&self, record: &Record) { + if self.enabled(record.metadata()) { + //FIXME: temporary patch to compile + let msg = format!("{}", record.args()); + let btree: BTreeMap> = BTreeMap::new(); + let mut logger = self.logger.lock().unwrap(); + let _ = match record.level() { + Level::Error => logger.err((1, btree.clone(), msg)), + Level::Warn => logger.warning((1, btree.clone(), msg)), + Level::Info => logger.info((1, btree.clone(), msg)), + Level::Debug => logger.debug((1, btree.clone(), msg)), + Level::Trace => logger.debug((1, btree, msg)), + }; + } + } + + fn flush(&self) { + let _ = self.logger.lock().unwrap().backend.flush(); + } +} + /// Unix socket Logger init function compatible with log crate #[cfg(unix)] pub fn init_unix(facility: Facility, log_level: log::LevelFilter) -> Result<()> {