| 
 | 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