use crate::*;
use chrono::prelude::*;
pub trait Loggable {
fn log(&self, ctx: crate::Context);
fn get_logger(&self) -> &str;
fn get_session(&self) -> Option<&str>;
#[track_caller]
fn debug(&self, message: impl Into<String>) {
let loc = std::panic::Location::caller();
self.log(Context::Log {
time : Local::now(),
level : Level::Debug,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message.into(),
});
}
#[track_caller]
fn verbose(&self, message: impl Into<String>) {
let loc = std::panic::Location::caller();
self.log(Context::Log {
time : Local::now(),
level : Level::Verbose,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message.into(),
});
}
#[track_caller]
fn info(&self, message: impl Into<String>) {
let loc = std::panic::Location::caller();
self.log(Context::Log {
time : Local::now(),
level : Level::Info,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message.into(),
});
}
#[track_caller]
fn warning(&self, message: impl Into<String>) {
let loc = std::panic::Location::caller();
self.log(Context::Log {
time : Local::now(),
level : Level::Warning,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message.into(),
});
}
#[track_caller]
fn critical(&self, message: impl Into<String>) {
let loc = std::panic::Location::caller();
self.log(Context::Log {
time : Local::now(),
level : Level::Critical,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message.into(),
});
}
#[track_caller]
fn error(&self, message: impl Into<String>) {
let loc = std::panic::Location::caller();
self.log(Context::Log {
time : Local::now(),
level : Level::Error,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message.into(),
});
}
#[track_caller]
fn fatal(&self, message: impl Into<String>) -> ! {
let loc = std::panic::Location::caller();
let message = message.into();
self.log(Context::Log {
time : Local::now(),
level : Level::Fatal,
file : loc.file(),
line : loc.line(),
logger : self.get_logger (),
session: self.get_session(),
message: &message,
});
panic!("{message}");
}
}