eigen_logging/
tracing_logger.rs1use super::log_level::LogLevel;
2use super::logger::Logger;
3use std::{fmt::Debug, sync::Arc};
4use tracing::{debug, error, info, trace, warn};
5
6#[derive(Default, Debug, Clone)]
11pub struct TracingLogger {
12 pub add_source: bool,
14
15 pub level: LogLevel,
17
18 pub time_format: String,
21}
22
23impl TracingLogger {
24 pub fn new_text_logger(
25 no_color: bool,
26 time_format: String,
27 level: LogLevel,
28 add_source: bool,
29 ) -> Arc<dyn Logger> {
30 let tracing_level = match level {
31 LogLevel::Fatal => tracing::Level::ERROR,
32 LogLevel::Error => tracing::Level::ERROR,
33 LogLevel::Warn => tracing::Level::WARN,
34 LogLevel::Info => tracing::Level::INFO,
35 LogLevel::Debug => tracing::Level::DEBUG,
36 LogLevel::Trace => tracing::Level::TRACE,
37 };
38 tracing::subscriber::set_global_default(
39 tracing_subscriber::fmt::Subscriber::builder()
40 .with_max_level(tracing_level)
41 .with_ansi(no_color)
42 .finish(),
43 )
44 .expect("setting default subscriber failed");
45
46 Arc::new(TracingLogger {
47 add_source,
48 level,
49 time_format,
50 })
51 }
52}
53
54pub fn create_tracing_logger(
55 no_color: bool,
56 time_format: String,
57 level: LogLevel,
58 add_source: bool,
59) -> Arc<dyn Logger> {
60 TracingLogger::new_text_logger(no_color, time_format, level, add_source)
61}
62
63impl Logger for TracingLogger {
64 fn debug(&self, msg: &str, tags: &str) {
67 debug!("{} {:?}", msg, [tags]);
68 }
69
70 fn info(&self, msg: &str, tags: &str) {
71 info!("{} {:?}", msg, [tags]);
72 }
73
74 fn warn(&self, msg: &str, tags: &str) {
75 warn!("{} {:?}", msg, [tags]);
76 }
77
78 fn error(&self, msg: &str, tags: &str) {
79 error!("{} {:?}", msg, [tags]);
80 }
81
82 fn fatal(&self, msg: &str, tags: &str) {
83 error!("{} {:?}", msg, [tags]);
84 panic!("Fatal error occurred: {} {:?}", msg, [tags]);
85 }
86
87 fn log(&self, msg: &str, tags: &str) {
88 match self.level {
89 LogLevel::Fatal => {
90 error!("Fatal");
91 self.fatal(msg, tags);
92 }
93 LogLevel::Error => {
94 error!("Error");
95 self.error(msg, tags);
96 }
97 LogLevel::Warn => {
98 warn!("Warn");
99 self.warn(msg, tags);
100 }
101 LogLevel::Info => {
102 info!("Info");
103 self.info(msg, tags);
104 }
105 LogLevel::Debug => {
106 debug!("Debug");
107 self.debug(msg, tags);
108 }
109 LogLevel::Trace => {
110 trace!("Trace");
111 self.debug(msg, tags);
112 }
113 }
114 }
115}
116
117#[cfg(test)]
118mod tests {
119 use crate::get_test_logger;
120
121 #[test]
122 fn test_log() {
123 let logger = get_test_logger();
124 logger.log("Log", "info logged");
125 }
126}