Exercise: Log Filter
Building on the generic logger from this morning, implement a Filter
which
uses a closure to filter log messages, sending those which pass the filtering
predicate to an inner logger.
pub trait Logger { /// Log a message at the given verbosity level. fn log(&self, verbosity: u8, message: &str); } struct StderrLogger; impl Logger for StderrLogger { fn log(&self, verbosity: u8, message: &str) { eprintln!("verbosity={verbosity}: {message}"); } } // TODO: Define and implement `Filter`. fn main() { let logger = Filter::new(StderrLogger, |_verbosity, msg| msg.contains("yikes")); logger.log(5, "FYI"); logger.log(1, "yikes, something went wrong"); logger.log(2, "uhoh"); }