rust-log 0.2.1

A simple and flexible Logging System for Rust!
Documentation
//!
//! # Rust-Log: A simple and flexible Logging System for Rust.
//! We present you a simple but flexible logging system with many different levels of logging.
//!
//! [LogLevel] - structure containing logging levels
//!
//! [Logger] - a structure containing functions for logging.
//!
//! # Example
//! ```
//!fn main() {
//!   use rust_log::{Logger, LogLevel};
//!   let logger = Logger::new(LogLevel::Debug);
//!
//!   // use macros (more comfortable)
//!
//!   info!(logger, "This is an info message!");
//!   /*...*/
//!}
//!
//! ```
//!
//!
#[macro_use]
extern crate colored;
use chrono::Utc;
use colored::*;

#[derive(Copy, Clone,PartialEq)]
pub enum LogLevel {
    Debug,
    Info,
    Error,
    Warn,
    Fatal,
    Critical,
}

#[derive(Copy, Clone,PartialEq)]
pub struct Logger {
    level: LogLevel,
}

impl Logger {
    pub fn new(level: LogLevel) -> Self {
        Logger { level }
    }

    fn log(&self, level: LogLevel, message: &str) {
        if level as u8 >= self.level as u8 && level != LogLevel::Error {
            let now = Utc::now();
            println!("[{}] {} - {}", level_to_string(level.clone()), now, message);
        }else {
            let now = Utc::now();
            eprintln!("[{}] {} - {}", level_to_string(level.clone()), now, message);
        }
    }

    pub fn debug(&self, message: &str) {
        self.log(LogLevel::Debug, message);
    }

    pub fn info(&self, message: &str) {
        self.log(LogLevel::Info, message);
    }

    pub fn error(&self, message: &str) {
        self.log(LogLevel::Error, message);
    }

    pub fn warn(&self, message: &str) {
        self.log(LogLevel::Warn, message);
    }

    pub fn fatal(&self, message: &str) {
        self.log(LogLevel::Fatal, message);
    }
    pub fn critical(&self, message: &str) {
        self.log(LogLevel::Critical, message);
    }
}
#[macro_export]
macro_rules! debug {
    ($logger:expr, $message:expr) => {
        $logger.debug($message);
    };
}
#[macro_export]
macro_rules! warn {
    ($logger:expr, $message:expr) => {
        $logger.warn($message);
    };
}
#[macro_export]
macro_rules! error {
    ($logger:expr, $message:expr) => {
        $logger.error($message);
    };
}
#[macro_export]
macro_rules! info {
    ($logger:expr, $message:expr) => {
        $logger.info($message);
    };
}
#[macro_export]
macro_rules! fatal {
    ($logger:expr, $message:expr) => {
        $logger.fatal($message);
    };
}
#[macro_export]
macro_rules! critical {
    ($logger:expr, $message:expr) => {
        $logger.critical($message);
    };
}

fn level_to_string(level: LogLevel) -> String {
    match level {
        LogLevel::Debug => format!("{}", "DEBUG".cyan().italic().underline()),
        LogLevel::Info => format!("{}", "INFO".green().bold()),
        LogLevel::Error => format!("{}", "ERROR".red().italic().bold()),
        LogLevel::Warn => format!("{}", "WARN".yellow().on_yellow().bold().dimmed()),
        LogLevel::Fatal => format!("{}", "FATAL".on_bright_red().white().bold().underline()),
        LogLevel::Critical => format!("{}", "CRITICAL".bright_red().bold().italic().underline()),
    }
}