1336d762aSopenharmony_ci/*! 2336d762aSopenharmony_ciUsing `env_logger` to drive a custom logger. 3336d762aSopenharmony_ci 4336d762aSopenharmony_ciBefore running this example, try setting the `MY_LOG_LEVEL` environment variable to `info`: 5336d762aSopenharmony_ci 6336d762aSopenharmony_ci```no_run,shell 7336d762aSopenharmony_ci$ export MY_LOG_LEVEL='info' 8336d762aSopenharmony_ci``` 9336d762aSopenharmony_ci 10336d762aSopenharmony_ciIf you only want to change the way logs are formatted, look at the `custom_format` example. 11336d762aSopenharmony_ci*/ 12336d762aSopenharmony_ci 13336d762aSopenharmony_ci#[macro_use] 14336d762aSopenharmony_ciextern crate log; 15336d762aSopenharmony_ci 16336d762aSopenharmony_ciuse env_logger::filter::{Builder, Filter}; 17336d762aSopenharmony_ci 18336d762aSopenharmony_ciuse log::{Log, Metadata, Record, SetLoggerError}; 19336d762aSopenharmony_ci 20336d762aSopenharmony_ciconst FILTER_ENV: &str = "MY_LOG_LEVEL"; 21336d762aSopenharmony_ci 22336d762aSopenharmony_cistruct MyLogger { 23336d762aSopenharmony_ci inner: Filter, 24336d762aSopenharmony_ci} 25336d762aSopenharmony_ci 26336d762aSopenharmony_ciimpl MyLogger { 27336d762aSopenharmony_ci fn new() -> MyLogger { 28336d762aSopenharmony_ci let mut builder = Builder::from_env(FILTER_ENV); 29336d762aSopenharmony_ci 30336d762aSopenharmony_ci MyLogger { 31336d762aSopenharmony_ci inner: builder.build(), 32336d762aSopenharmony_ci } 33336d762aSopenharmony_ci } 34336d762aSopenharmony_ci 35336d762aSopenharmony_ci fn init() -> Result<(), SetLoggerError> { 36336d762aSopenharmony_ci let logger = Self::new(); 37336d762aSopenharmony_ci 38336d762aSopenharmony_ci log::set_max_level(logger.inner.filter()); 39336d762aSopenharmony_ci log::set_boxed_logger(Box::new(logger)) 40336d762aSopenharmony_ci } 41336d762aSopenharmony_ci} 42336d762aSopenharmony_ci 43336d762aSopenharmony_ciimpl Log for MyLogger { 44336d762aSopenharmony_ci fn enabled(&self, metadata: &Metadata) -> bool { 45336d762aSopenharmony_ci self.inner.enabled(metadata) 46336d762aSopenharmony_ci } 47336d762aSopenharmony_ci 48336d762aSopenharmony_ci fn log(&self, record: &Record) { 49336d762aSopenharmony_ci // Check if the record is matched by the logger before logging 50336d762aSopenharmony_ci if self.inner.matches(record) { 51336d762aSopenharmony_ci println!("{} - {}", record.level(), record.args()); 52336d762aSopenharmony_ci } 53336d762aSopenharmony_ci } 54336d762aSopenharmony_ci 55336d762aSopenharmony_ci fn flush(&self) {} 56336d762aSopenharmony_ci} 57336d762aSopenharmony_ci 58336d762aSopenharmony_cifn main() { 59336d762aSopenharmony_ci MyLogger::init().unwrap(); 60336d762aSopenharmony_ci 61336d762aSopenharmony_ci info!("a log from `MyLogger`"); 62336d762aSopenharmony_ci} 63