Skip to main content

rglw_log/
logging.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
4pub enum LogLevel {
5    /// A level lower than all log levels.
6    Off,
7    /// Corresponds to the `Error` log level.
8    Error,
9    /// Corresponds to the `Warn` log level.
10    Warn,
11    /// Corresponds to the `Info` log level.
12    Info,
13    /// Corresponds to the `Debug` log level.
14    Debug,
15    /// Corresponds to the `Trace` log level.
16    Trace,
17}
18
19impl LogLevel {
20    pub fn to_level_filter(self) -> log::LevelFilter {
21        match self {
22            LogLevel::Debug => log::LevelFilter::Debug,
23            LogLevel::Info => log::LevelFilter::Info,
24            LogLevel::Error => log::LevelFilter::Error,
25            LogLevel::Trace => log::LevelFilter::Trace,
26            LogLevel::Warn => log::LevelFilter::Warn,
27            LogLevel::Off => log::LevelFilter::Off,
28        }
29    }
30}
31
32#[macro_export(local_inner_macros)]
33macro_rules! colored_log {
34    ($level: expr, $color: expr, $message: expr, $($parameters: tt)*) => {
35        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", $color, std::format!($message, $($parameters)*));
36        log::log!($level, "{}", log_message);
37    };
38    ($level: expr, $color: expr, $message: expr) => {
39        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", $color, $message);
40        log::log!($level, "{}", log_message);
41    };
42}
43
44#[macro_export(local_inner_macros)]
45macro_rules! info {
46    ($message: expr, $($parameters: tt)*) => {
47        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 34, std::format!($message, $($parameters)*));
48        log::log!(log::Level::Info, "{}", log_message);
49    };
50    ($message: expr) => {
51        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 34, $message);
52        log::log!(log::Level::Info, "{}", log_message);
53    };
54}
55
56#[macro_export(local_inner_macros)]
57macro_rules! warn {
58    ($message: expr, $($parameters: tt)*) => {
59        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 33, std::format!($message, $($parameters)*));
60        log::log!(log::Level::Warn, "{}", log_message);
61    };
62    ($message: expr) => {
63        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 33, $message);
64        log::log!(log::Level::Warn, "{}", log_message);
65    };
66}
67
68#[macro_export(local_inner_macros)]
69macro_rules! error {
70    ($message: expr, $($parameters: tt)*) => {
71        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 31, std::format!($message, $($parameters)*));
72        log::log!(log::Level::Error, "{}", log_message);
73    };
74    ($message: expr) => {
75        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 31, $message);
76        log::log!(log::Level::Error, "{}", log_message);
77    };
78}
79
80#[macro_export(local_inner_macros)]
81macro_rules! debug {
82    ($message: expr, $($parameters: tt)*) => {
83        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 32, std::format!($message, $($parameters)*));
84        log::log!(log::Level::Debug, "{}", log_message);
85    };
86    ($message: expr) => {
87        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 32, $message);
88        log::log!(log::Level::Debug, "{}", log_message);
89    };
90}
91
92#[macro_export(local_inner_macros)]
93macro_rules! trace {
94    ($message: expr, $($parameters: tt)*) => {
95        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 37, std::format!($message, $($parameters)*));
96        log::log!(log::Level::Trace, "{}", log_message);
97    };
98    ($message: expr) => {
99        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 37, $message);
100        log::log!(log::Level::Trace, "{}", log_message);
101    };
102}
103
104#[cfg(test)]
105mod log_tests {
106    #[test]
107    pub fn log_info() {
108        info!("Hello i'm an info log");
109    }
110
111    #[test]
112    pub fn log_warning() {
113        warn!("Hello i'm an warning log");
114    }
115
116    #[test]
117    pub fn trace_trace() {
118        trace!("Hello i'm an trace log");
119    }
120
121    #[test]
122    pub fn log_error() {
123        error!("Hello i'm an error log");
124    }
125
126    #[test]
127    pub fn log_debug() {
128        debug!("Hello i'm an debug log");
129    }
130}