use std::env::var;
use tracing::level_filters::LevelFilter;
pub fn log_level() -> LevelFilter {
var("LOG_LEVEL").map_or(LevelFilter::INFO, |val| match val.to_uppercase().as_str() {
"TRACE" => LevelFilter::TRACE,
"DEBUG" => LevelFilter::DEBUG,
"WARN" => LevelFilter::WARN,
"ERROR" => LevelFilter::ERROR,
_ => LevelFilter::INFO,
})
}
#[cfg(test)]
mod tests {
use super::log_level;
use sealed_test::prelude::*;
use std::env::set_var;
use tracing_subscriber::filter::LevelFilter;
#[sealed_test]
fn test_log_level_default() {
assert_eq!(log_level(), LevelFilter::INFO);
}
#[sealed_test]
fn test_log_level_invalid_values() {
let invalid_values = vec!["INVALID", "123", "", "VERBOSE", "CRITICAL"];
for invalid_val in invalid_values {
unsafe {
set_var("LOG_LEVEL", invalid_val);
}
assert_eq!(
log_level(),
LevelFilter::INFO,
"Failed for LOG_LEVEL={}",
invalid_val
);
}
}
}