|
| 1 | +use std::sync::OnceLock; |
| 2 | + |
1 | 3 | use log::{Level, LevelFilter, Log, Metadata, Record}; |
2 | 4 |
|
3 | 5 | const CLICOLOR_FORCE: &str = "CLICOLOR_FORCE"; |
@@ -65,11 +67,21 @@ impl Log for Logger { |
65 | 67 | } |
66 | 68 |
|
67 | 69 | pub fn default() { |
68 | | - const LOGGER: Logger = Logger { |
69 | | - level: LevelFilter::Trace, |
70 | | - }; |
71 | | - log::set_max_level(LOGGER.level); |
72 | | - if let Err(err) = log::set_logger(&LOGGER) { |
| 70 | + static LOGGER: OnceLock<Logger> = OnceLock::new(); |
| 71 | + let logger = LOGGER.get_or_init(|| Logger { |
| 72 | + level: std::env::var("RUST_LOG") |
| 73 | + .map(|x| match x.as_str() { |
| 74 | + "warn" => log::LevelFilter::Warn, |
| 75 | + "trace" => log::LevelFilter::Trace, |
| 76 | + "error" => log::LevelFilter::Error, |
| 77 | + "info" => log::LevelFilter::Info, |
| 78 | + "debug" => log::LevelFilter::Debug, |
| 79 | + _ => log::LevelFilter::Trace, |
| 80 | + }) |
| 81 | + .unwrap_or(log::LevelFilter::Trace), |
| 82 | + }); |
| 83 | + log::set_max_level(logger.level); |
| 84 | + if let Err(err) = log::set_boxed_logger(Box::new(logger)) { |
73 | 85 | // used const to allow for static lifetime |
74 | 86 | eprintln!("attaching logger failed! shouldn't be possible: {:?}", err); |
75 | 87 | } |
|
0 commit comments