#[cfg(feature = "std")]
use log::LevelFilter;
#[cfg(feature = "std")]
use std::sync::OnceLock;
#[cfg(feature = "std")]
static LOGGER_INITIALIZED: OnceLock<()> = OnceLock::new();
#[cfg(feature = "std")]
pub fn init_logger() {
LOGGER_INITIALIZED.get_or_init(|| ());
env_logger::Builder::from_default_env()
.filter_level(LevelFilter::Info)
.init();
}
#[cfg(feature = "std")]
pub fn init_logger_with_filter(filter: &str) {
LOGGER_INITIALIZED.get_or_init(|| ());
env_logger::Builder::from_default_env()
.filter_level(filter.parse().unwrap_or(LevelFilter::Info))
.init();
}
#[cfg(feature = "std")]
pub fn try_init_logger() -> Result<(), log::SetLoggerError> {
LOGGER_INITIALIZED.get_or_init(|| ());
env_logger::Builder::from_default_env()
.filter_level(LevelFilter::Info)
.try_init()
}
#[cfg(feature = "std")]
pub fn try_init_logger_with_filter(filter: &str) -> Result<(), log::SetLoggerError> {
LOGGER_INITIALIZED.get_or_init(|| ());
env_logger::Builder::from_default_env()
.filter_level(filter.parse().unwrap_or(LevelFilter::Info))
.try_init()
}
#[cfg(feature = "std")]
pub fn is_logger_initialized() -> bool {
LOGGER_INITIALIZED.get().is_some()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_try_init_logger() {
let _ = try_init_logger();
}
#[test]
fn test_try_init_logger_with_filter() {
let _ = try_init_logger_with_filter("debug");
}
#[test]
fn test_is_logger_initialized() {
let _ = try_init_logger();
let initialized = is_logger_initialized();
assert!(initialized);
}
}