ferretlog/
lib.rs

1#[derive(PartialEq, Eq, PartialOrd)]
2pub enum LogMode {
3    Critical = 1,
4    Error = 2,
5    Warning = 3,
6    Notice = 4,
7    Info = 5,
8    Debug = 6,
9    Todo = 7,
10}
11
12#[macro_export]
13macro_rules! critical {
14    ($($arg:tt)*) => ({
15        print_log(format!($($arg)*), LogMode::Critical);
16    });
17}
18
19#[macro_export]
20macro_rules! error {
21    ($($arg:tt)*) => ({
22        print_log(format!($($arg)*), LogMode::Error);
23    });
24}
25
26#[macro_export]
27macro_rules! warning {
28    ($($arg:tt)*) => ({
29        print_log(format!($($arg)*), LogMode::Warning);
30    });
31}
32
33#[macro_export]
34macro_rules! notice {
35    ($($arg:tt)*) => ({
36        print_log(format!($($arg)*), LogMode::Notice);
37    });
38}
39
40#[macro_export]
41macro_rules! info {
42    ($($arg:tt)*) => ({
43        print_log(format!($($arg)*), LogMode::Info);
44    });
45}
46
47#[macro_export]
48macro_rules! debug {
49    ($($arg:tt)*) => ({
50        print_log(format!($($arg)*), LogMode::Debug);
51    });
52}
53
54#[macro_export]
55macro_rules! todo {
56    ($($arg:tt)*) => ({
57        print_log(format!($($arg)*), LogMode::Todo);
58    });
59}
60
61pub fn print_log(msg: String, mode: LogMode) {
62    let prefix_text: &str = match mode {
63        LogMode::Critical => "Critical",
64        LogMode::Error => "Error",
65        LogMode::Warning => "Warning",
66        LogMode::Notice => "Notice",
67        LogMode::Info => "Info",
68        LogMode::Debug => "Debug",
69        LogMode::Todo => "TODO",
70    };
71
72    // Only print certain log levels
73    if mode <= allowed_log_level() {
74        println!("[{}] {}", prefix_text, msg);
75    }
76}
77
78fn allowed_log_level() -> LogMode {
79    match std::env::var("LOG_LEVEL") {
80        Ok(level) => {
81            match level.to_uppercase().as_str() {
82                "CRITICAL" => return LogMode::Critical,
83                "ERROR" => return LogMode::Error,
84                "WARNING" => return LogMode::Warning,
85                "NOTICE" => return LogMode::Notice,
86                "INFO" => return LogMode::Info,
87                "DEBUG" => return LogMode::Debug,
88                "TODO" => return LogMode::Todo,
89                _ => return LogMode::Notice,
90            }
91        }
92        Err(_) => {
93            if cfg!(debug_assertions) {
94                return LogMode::Todo;
95            } else {
96                return LogMode::Notice;
97            }
98        }
99    }
100}