datex_core/
logger.rs

1use cfg_if::cfg_if;
2use core::sync::atomic::AtomicBool;
3use core::sync::atomic::Ordering;
4
5static INIT: AtomicBool = AtomicBool::new(false);
6
7/// Initializes the logger with debug mode, logging all messages including debug messages.
8pub fn init_logger_debug() {
9    if !INIT.swap(true, Ordering::SeqCst) {
10        init(true);
11    }
12}
13
14/// Initializes the logger with default mode, only logging errors and above.
15pub fn init_logger() {
16    if !INIT.swap(true, Ordering::SeqCst) {
17        init(false);
18    }
19}
20
21cfg_if! {
22    if #[cfg(feature = "flexi_logger")] {
23        use flexi_logger;
24        fn init(debug: bool) {
25            let env = if debug {
26                "datex_core=trace,r#mod=trace"
27            } else {
28                "datex_core=error,r#mod=error"
29            };
30            flexi_logger::Logger::try_with_env_or_str(env).expect("Failed to initialize logger")
31                .start()
32                .expect("Failed to start logger");
33        }
34    }
35
36    else if #[cfg(feature = "wasm_logger")]
37    {
38        fn init(debug: bool) {
39            use log::Level;
40            use console_error_panic_hook;
41
42            console_log::init_with_level(
43                if debug {
44                    Level::Debug
45                } else {
46                    Level::Error
47                },
48            ).expect("Failed to initialize logger");
49            console_error_panic_hook::set_once();
50        }
51    }
52
53    else if #[cfg(feature = "env_logger")] {
54        use env_logger;
55        fn init(debug: bool) {
56            env_logger::init();
57            info!("Logger initialized! (Using env_logger)");
58        }
59    }
60
61    else if #[cfg(feature = "esp_logger")] {
62        fn init(debug: bool) {
63            if debug {
64                esp_println::logger::init_logger(log::LevelFilter::Debug);
65            }
66            else {
67                esp_println::logger::init_logger(log::LevelFilter::Info);
68            }
69        }
70    }
71
72    else {
73        fn init(debug: bool) {
74            #[cfg(feature = "std")]
75            {println!("No logger enabled. Logs will not be recorded.");}
76        }
77    }
78}