1use log::*;
4use safe_drive::logger::Logger as SdLogger;
5use safe_drive::{pr_debug, pr_error, pr_info, pr_warn};
6use std::sync::Arc;
7
8use log::{Level, Metadata, Record};
9
10struct Logger(Arc<SdLogger>);
11
12impl Logger {
13 fn new(name: &str) -> Self {
15 Self(Arc::new(SdLogger::new(name)))
16 }
17
18 fn init(self) -> Result<(), SetLoggerError> {
20 set_max_level(LevelFilter::Trace);
21 set_boxed_logger(Box::new(self))?;
22 Ok(())
23 }
24}
25
26impl Log for Logger {
27 fn enabled(&self, metadata: &Metadata) -> bool {
28 metadata.level() <= Level::Trace
29 }
30 fn log(&self, record: &Record) {
31 if self.enabled(record.metadata()) {
32 match record.level() {
33 Level::Trace => pr_debug!(self.0, "{}", record.args()),
34 Level::Debug => pr_debug!(self.0, "{}", record.args()),
35 Level::Info => pr_info!(self.0, "{}", record.args()),
36 Level::Warn => pr_warn!(self.0, "{}", record.args()),
37 Level::Error => pr_error!(self.0, "{}", record.args()),
38 }
39 }
40 }
41 fn flush(&self) {}
42}
43
44pub fn init_logger(name: &str) -> Result<(), SetLoggerError> {
46 Logger::new(name).init()
47}