1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
use simplelog::*;
use std::fs::File;

/// Location of the log file.
const LOG_FILE: &str = "rsc/log/main.log";
/// Default filter for the terminal logging.
pub const DEFAULT_LEVEL_TERM: LevelFilter = LevelFilter::Trace;
/// Default filter for the file logging.
pub const DEFAULT_LEVEL_WRITE: LevelFilter = LevelFilter::Trace;

/// Alias for filters.
pub type LevelFilter = simplelog::LevelFilter;

/// Function to initialize the logs.
pub fn log_init(term_level: LevelFilter, write_level: LevelFilter) {
    CombinedLogger::init(vec![
        TermLogger::new(
            term_level,
            Config::default(),
            TerminalMode::Mixed,
            ColorChoice::Auto,
        ),
        WriteLogger::new(
            write_level,
            Config::default(),
            File::create(LOG_FILE).unwrap(),
        ),
    ])
    .unwrap();
}

/// Macro for the function to initialize the logs for default usage.
#[macro_export]
macro_rules! log_init {
    () => {
        $crate::core::log::log_init(
            $crate::core::log::DEFAULT_LEVEL_TERM,
            $crate::core::log::DEFAULT_LEVEL_WRITE,
        )
    };
    ($term_level:expr) => {
        $crate::core::log::log_init($term_level, $crate::toolbox::log::DEFAULT_LEVEL_WRITE)
    };
    ($term_level:expr, $write_level:expr) => {
        $crate::core::log::log_init($term_level, $write_level)
    };
}

/// Alias for error logs.
#[macro_export]
macro_rules! error {
    (target: $target:expr, $($arg:tt)+) => (
        log::error!(target: $target, $($arg)+)
    );
    ($($arg:tt)+) => (
        log::error!($($arg)+)
    )
}

/// Alias for warn logs.
#[macro_export]
macro_rules! warn {
    (target: $target:expr, $($arg:tt)+) => (
        log::warn!(target: $target, $($arg)+)
    );
    ($($arg:tt)+) => (
        log::warn!($($arg)+)
    )
}

/// Alias for info logs.
#[macro_export]
macro_rules! info {
    (target: $target:expr, $($arg:tt)+) => (
        log::info!(target: $target, $($arg)+)
    );
    ($($arg:tt)+) => (
        log::info!($($arg)+)
    )
}

/// Alias for debug logs.
#[macro_export]
macro_rules! debug {
    (target: $target:expr, $($arg:tt)+) => {
        log::debug!(target: $target, $($arg)+)
    };
    ($($arg:tt)+) => {
        log::debug!($($arg)+)
    };
    () => {
        log::debug!("")
    }
}

/// Alias for trace logs.
#[macro_export]
macro_rules! trace {
    (target: $target:expr, $($arg:tt)+) => {
        log::trace!(target: $target, $($arg)+)
    };
    ($($arg:tt)+) => {
        log::trace!($($arg)+)
    };
    () => {
        log::trace!("")
    }
}