use super::level::Level;
use chrono::format::DelayedFormat;
use chrono::format::StrftimeItems;
use chrono::prelude::DateTime;
use chrono::prelude::Local;
pub struct Logger {
pub name: String,
}
impl Logger {
pub fn new(name: &str) -> Self {
Self {
name: String::from(name),
}
}
}
impl Logger {
fn log(&self, level: Level, message: &str) {
let fmt: &str = "%H:%M:%S %Y/%m/%d";
let local: DateTime<Local> = Local::now();
let timestamp: DelayedFormat<StrftimeItems> = local.format(fmt);
let logger: String = self.name.clone();
let level: String = level.name.clone();
println!("{logger} {level} [{timestamp}] {message}");
}
pub fn debug(&self, message: &str) {
let level: Level = Level::new("DEBUG");
self.log(level, message);
}
pub fn info(&self, message: &str) {
let level: Level = Level::new("INFO");
self.log(level, message);
}
pub fn warn(&self, message: &str) {
let level: Level = Level::new("WARN");
self.log(level, message);
}
pub fn error(&self, message: &str) {
let level: Level = Level::new("ERROR");
self.log(level, message);
}
pub fn critical(&self, message: &str) {
let level: Level = Level::new("CRITICAL");
self.log(level, message);
}
}