Geoffrey-rs/geoffrey_api/src/logging.rs

44 lines
1.1 KiB
Rust

use log::{LevelFilter, SetLoggerError};
use serde::{Deserialize, Serialize};
use simple_logger::SimpleLogger;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub enum LogLevel {
None,
Warn,
Info,
Debug,
}
impl From<&str> for LogLevel {
#[allow(clippy::wildcard_in_or_patterns)]
fn from(s: &str) -> Self {
let s = s.to_lowercase();
match s.as_str() {
"warn" | "w" => LogLevel::Warn,
"info" | "i" => LogLevel::Info,
"debug" | "d" => LogLevel::Debug,
"none" | _ => LogLevel::None,
}
}
}
impl From<LogLevel> for LevelFilter {
fn from(l: LogLevel) -> Self {
match l {
LogLevel::None => LevelFilter::Off,
LogLevel::Warn => LevelFilter::Warn,
LogLevel::Info => LevelFilter::Info,
LogLevel::Debug => LevelFilter::Debug,
}
}
}
pub fn init_logging(log_level: LogLevel) -> Result<(), SetLoggerError> {
SimpleLogger::new()
.with_level(log_level.into())
.with_module_level("hyper", LevelFilter::Info)
.with_module_level("sled", LevelFilter::Info)
.init()
}