rust_log/
lib.rs

1//!
2//! # Rust-Log: A simple and flexible Logging System for Rust.
3//! We present you a simple but flexible logging system with many different levels of logging.
4//!
5//! [LogLevel] - structure containing logging levels
6//!
7//! [Logger] - a structure containing functions for logging.
8//!
9//! # Example
10//! ```
11//!fn main() {
12//!   use rust_log::{Logger, LogLevel};
13//!   let logger = Logger::new(LogLevel::Debug);
14//!
15//!   // use macros (more comfortable)
16//!
17//!   info!(logger, "This is an info message!");
18//!   /*...*/
19//!}
20//!
21//! ```
22//!
23//!
24#[macro_use]
25extern crate colored;
26use chrono::Utc;
27use colored::*;
28
29#[derive(Copy, Clone,PartialEq)]
30pub enum LogLevel {
31    Debug,
32    Info,
33    Error,
34    Warn,
35    Fatal,
36    Critical,
37}
38
39#[derive(Copy, Clone,PartialEq)]
40pub struct Logger {
41    level: LogLevel,
42}
43
44impl Logger {
45    pub fn new(level: LogLevel) -> Self {
46        Logger { level }
47    }
48
49    fn log(&self, level: LogLevel, message: &str) {
50        if level as u8 >= self.level as u8 && level != LogLevel::Error {
51            let now = Utc::now();
52            println!("[{}] {} - {}", level_to_string(level.clone()), now, message);
53        }else {
54            let now = Utc::now();
55            eprintln!("[{}] {} - {}", level_to_string(level.clone()), now, message);
56        }
57    }
58
59    pub fn debug(&self, message: &str) {
60        self.log(LogLevel::Debug, message);
61    }
62
63    pub fn info(&self, message: &str) {
64        self.log(LogLevel::Info, message);
65    }
66
67    pub fn error(&self, message: &str) {
68        self.log(LogLevel::Error, message);
69    }
70
71    pub fn warn(&self, message: &str) {
72        self.log(LogLevel::Warn, message);
73    }
74
75    pub fn fatal(&self, message: &str) {
76        self.log(LogLevel::Fatal, message);
77    }
78    pub fn critical(&self, message: &str) {
79        self.log(LogLevel::Critical, message);
80    }
81}
82#[macro_export]
83macro_rules! debug {
84    ($logger:expr, $message:expr) => {
85        $logger.debug($message);
86    };
87}
88#[macro_export]
89macro_rules! warn {
90    ($logger:expr, $message:expr) => {
91        $logger.warn($message);
92    };
93}
94#[macro_export]
95macro_rules! error {
96    ($logger:expr, $message:expr) => {
97        $logger.error($message);
98    };
99}
100#[macro_export]
101macro_rules! info {
102    ($logger:expr, $message:expr) => {
103        $logger.info($message);
104    };
105}
106#[macro_export]
107macro_rules! fatal {
108    ($logger:expr, $message:expr) => {
109        $logger.fatal($message);
110    };
111}
112#[macro_export]
113macro_rules! critical {
114    ($logger:expr, $message:expr) => {
115        $logger.critical($message);
116    };
117}
118
119fn level_to_string(level: LogLevel) -> String {
120    match level {
121        LogLevel::Debug => format!("{}", "DEBUG".cyan().italic().underline()),
122        LogLevel::Info => format!("{}", "INFO".green().bold()),
123        LogLevel::Error => format!("{}", "ERROR".red().italic().bold()),
124        LogLevel::Warn => format!("{}", "WARN".yellow().on_yellow().bold().dimmed()),
125        LogLevel::Fatal => format!("{}", "FATAL".on_bright_red().white().bold().underline()),
126        LogLevel::Critical => format!("{}", "CRITICAL".bright_red().bold().italic().underline()),
127    }
128}