|
| 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,23 @@ 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_os("RUST_LOG") |
| 73 | + .map(|x| x.into_string().ok()) |
| 74 | + .flatten() |
| 75 | + .map(|x| match x.as_str() { |
| 76 | + "warn" => log::LevelFilter::Warn, |
| 77 | + "trace" => log::LevelFilter::Trace, |
| 78 | + "error" => log::LevelFilter::Error, |
| 79 | + "info" => log::LevelFilter::Info, |
| 80 | + "debug" => log::LevelFilter::Debug, |
| 81 | + _ => log::LevelFilter::Trace, |
| 82 | + }) |
| 83 | + .unwrap_or(log::LevelFilter::Trace), |
| 84 | + }); |
| 85 | + log::set_max_level(logger.level); |
| 86 | + if let Err(err) = log::set_boxed_logger(Box::new(logger)) { |
73 | 87 | // used const to allow for static lifetime
|
74 | 88 | eprintln!("attaching logger failed! shouldn't be possible: {:?}", err);
|
75 | 89 | }
|
|
0 commit comments