mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	This preemptively avoids the addition of a new version of the crate. Differential Revision: https://phabricator.services.mozilla.com/D168221
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
/*!
 | 
						|
Using `env_logger` to drive a custom logger.
 | 
						|
 | 
						|
Before running this example, try setting the `MY_LOG_LEVEL` environment variable to `info`:
 | 
						|
 | 
						|
```no_run,shell
 | 
						|
$ export MY_LOG_LEVEL='info'
 | 
						|
```
 | 
						|
 | 
						|
If you only want to change the way logs are formatted, look at the `custom_format` example.
 | 
						|
*/
 | 
						|
 | 
						|
#[macro_use]
 | 
						|
extern crate log;
 | 
						|
 | 
						|
use env_logger::filter::{Builder, Filter};
 | 
						|
 | 
						|
use log::{Log, Metadata, Record, SetLoggerError};
 | 
						|
 | 
						|
const FILTER_ENV: &str = "MY_LOG_LEVEL";
 | 
						|
 | 
						|
struct MyLogger {
 | 
						|
    inner: Filter,
 | 
						|
}
 | 
						|
 | 
						|
impl MyLogger {
 | 
						|
    fn new() -> MyLogger {
 | 
						|
        let mut builder = Builder::from_env(FILTER_ENV);
 | 
						|
 | 
						|
        MyLogger {
 | 
						|
            inner: builder.build(),
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    fn init() -> Result<(), SetLoggerError> {
 | 
						|
        let logger = Self::new();
 | 
						|
 | 
						|
        log::set_max_level(logger.inner.filter());
 | 
						|
        log::set_boxed_logger(Box::new(logger))
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
impl Log for MyLogger {
 | 
						|
    fn enabled(&self, metadata: &Metadata) -> bool {
 | 
						|
        self.inner.enabled(metadata)
 | 
						|
    }
 | 
						|
 | 
						|
    fn log(&self, record: &Record) {
 | 
						|
        // Check if the record is matched by the logger before logging
 | 
						|
        if self.inner.matches(record) {
 | 
						|
            println!("{} - {}", record.level(), record.args());
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    fn flush(&self) {}
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    MyLogger::init().unwrap();
 | 
						|
 | 
						|
    info!("a log from `MyLogger`");
 | 
						|
}
 |