tool/core/
log.rs

1use simplelog::*;
2use std::fs::File;
3
4/// Location of the log file.
5const LOG_FILE: &str = "rsc/log/main.log";
6/// Default filter for the terminal logging.
7pub const DEFAULT_LEVEL_TERM: LevelFilter = LevelFilter::Trace;
8/// Default filter for the file logging.
9pub const DEFAULT_LEVEL_WRITE: LevelFilter = LevelFilter::Trace;
10
11/// Alias for filters.
12pub type LevelFilter = simplelog::LevelFilter;
13
14/// Function to initialize the logs.
15pub fn log_init(term_level: LevelFilter, write_level: LevelFilter) {
16    CombinedLogger::init(vec![
17        TermLogger::new(
18            term_level,
19            Config::default(),
20            TerminalMode::Mixed,
21            ColorChoice::Auto,
22        ),
23        WriteLogger::new(
24            write_level,
25            Config::default(),
26            File::create(LOG_FILE).unwrap(),
27        ),
28    ])
29    .unwrap();
30}
31
32/// Macro for the function to initialize the logs for default usage.
33#[macro_export]
34macro_rules! log_init {
35    () => {
36        $crate::core::log::log_init(
37            $crate::core::log::DEFAULT_LEVEL_TERM,
38            $crate::core::log::DEFAULT_LEVEL_WRITE,
39        )
40    };
41    ($term_level:expr) => {
42        $crate::core::log::log_init($term_level, $crate::toolbox::log::DEFAULT_LEVEL_WRITE)
43    };
44    ($term_level:expr, $write_level:expr) => {
45        $crate::core::log::log_init($term_level, $write_level)
46    };
47}
48
49/// Alias for error logs.
50#[macro_export]
51macro_rules! error {
52    (target: $target:expr, $($arg:tt)+) => (
53        log::error!(target: $target, $($arg)+)
54    );
55    ($($arg:tt)+) => (
56        log::error!($($arg)+)
57    )
58}
59
60/// Alias for warn logs.
61#[macro_export]
62macro_rules! warn {
63    (target: $target:expr, $($arg:tt)+) => (
64        log::warn!(target: $target, $($arg)+)
65    );
66    ($($arg:tt)+) => (
67        log::warn!($($arg)+)
68    )
69}
70
71/// Alias for info logs.
72#[macro_export]
73macro_rules! info {
74    (target: $target:expr, $($arg:tt)+) => (
75        log::info!(target: $target, $($arg)+)
76    );
77    ($($arg:tt)+) => (
78        log::info!($($arg)+)
79    )
80}
81
82/// Alias for debug logs.
83#[macro_export]
84macro_rules! debug {
85    (target: $target:expr, $($arg:tt)+) => {
86        log::debug!(target: $target, $($arg)+)
87    };
88    ($($arg:tt)+) => {
89        log::debug!($($arg)+)
90    };
91    () => {
92        log::debug!("")
93    }
94}
95
96/// Alias for trace logs.
97#[macro_export]
98macro_rules! trace {
99    (target: $target:expr, $($arg:tt)+) => {
100        log::trace!(target: $target, $($arg)+)
101    };
102    ($($arg:tt)+) => {
103        log::trace!($($arg)+)
104    };
105    () => {
106        log::trace!("")
107    }
108}