rag/src/lib.rs

57 lines
1.4 KiB

/// Logger implementation for colors in the terminal and in the future
/// logging to a file and to a remote log server
extern crate chrono;
extern crate colored;
extern crate log;
use colored::*;
use log::{Log, LogLevel, LogLevelFilter, LogMetadata, LogRecord, set_logger};
#[cfg(test)]
mod tests;
mod error;
use error::RagResult;
struct Logger;
impl Log for Logger {
fn enabled(&self, metadata: &LogMetadata) -> bool {
metadata.level() <= LogLevel::Info
}
fn log(&self, record: &LogRecord) {
if self.enabled(record.metadata()) {
let now = chrono::Local::now();
let ts = now.format("%Y-%m-%dT%H:%M:%S%.3f%z").to_string();
let (msg, _level) = match record.level() {
LogLevel::Error => {
(format!("{} {} {}", ts.white().bold(), "ERR".red(), record.args()), 3)
}
LogLevel::Warn => {
(format!("{} {} {}", ts.white().bold(), "WRN".purple(), record.args()), 4)
}
LogLevel::Info => {
(format!("{} {} {}", ts.white().bold(), "INF".cyan(), record.args()), 6)
}
LogLevel::Debug => {
(format!("{} {} {}", ts.white().bold(), "DBG".yellow(), record.args()), 7)
}
LogLevel::Trace => {
(format!("{} {} {}", ts.white().bold(), "TRC".green(), record.args()), 0)
}
};
println!("{}", msg);
}
}
}
pub fn init() -> RagResult<()> {
Ok(set_logger(|max_log_level| {
max_log_level.set(LogLevelFilter::Info);
Box::new(Logger)
})?)
}