cyfs_debug/log_util/
combine_logger.rs1use log::*;
2
3pub fn str_to_logfilter_level(level: &str) -> LevelFilter {
4 match level {
5 "trace" => LevelFilter::Trace,
6 "debug" => LevelFilter::Debug,
7 "info" => LevelFilter::Info,
8 "warn" => LevelFilter::Warn,
9 "error" => LevelFilter::Error,
10 "off" => LevelFilter::Off,
11 _ => LevelFilter::Off,
12 }
13}
14
15pub fn str_to_log_level(level: &str) -> Level {
16 match level {
17 "trace" => Level::Trace,
18 "debug" => Level::Debug,
19 "info" => Level::Info,
20 "warn" => Level::Warn,
21 "error" => Level::Error,
22 _ => Level::Error,
23 }
24}
25
26pub struct CombineLogger {
27 loggers: Vec<Box<dyn Log>>
28}
29
30impl CombineLogger {
31 pub fn new() -> CombineLogger
32 {
33 CombineLogger{loggers: vec![]}
34 }
35
36 pub fn append(mut self, logger: Box<dyn Log>) -> Self {
37 self.loggers.push(logger);
38 self
39 }
40
41 pub fn start(self) -> bool {
42 if let Err(e) = log::set_boxed_logger(Box::new(self)) {
45 warn!("logger already initialized, use prev one. {}", e);
46 false
47 } else {
48 true
49 }
50 }
51}
52
53impl Log for CombineLogger {
54 fn enabled(&self, metadata: &Metadata) -> bool {
55 let mut ret = true;
56 for logger in &self.loggers {
57 ret = ret | logger.enabled(metadata);
58 }
59 ret
60 }
61
62 fn log(&self, record: &Record) {
63 for logger in &self.loggers {
64 logger.log(record);
65 }
66 }
67
68 fn flush(&self) {
69 for logger in &self.loggers {
70 logger.flush();
71 }
72 }
73}