Exercise: Log Filter
Building on the generic logger from this morning, implement a Filter that uses a closure to filter log messages, sending those that pass the filtering predicate to an inner logger.
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
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");
}