use fake_log::{debug, error, info, trace, warn};
use fake_log::{Level, Log, Metadata, Record};
struct CustomLogger {
name: &'static str,
}
impl CustomLogger {
fn new(name: &'static str) -> Self {
Self { name }
}
}
impl Log for CustomLogger {
fn enabled(&self, metadata: &Metadata) -> bool {
println!(
"Logger '{}': checking if level {:?} is enabled",
self.name,
metadata.level()
);
false
}
fn log(&self, record: &Record) {
println!(
"Logger '{}': [{}] {}",
self.name,
record.level(),
record.args()
);
}
fn flush(&self) {
println!("Logger '{}': flushing", self.name);
}
}
fn main() {
println!("=== Custom Logger Example ===");
println!("Note: Even with a custom logger, fake-log optimizes away all calls");
println!();
let logger = CustomLogger::new("MyApp");
let metadata = Metadata::builder()
.level(Level::Info)
.target("example")
.build();
println!("Testing logger.enabled(): {}", logger.enabled(&metadata));
let record = Record::builder()
.level(Level::Info)
.target("example")
.args(format_args!("Manual log record"))
.build();
logger.log(&record);
logger.flush();
println!();
println!("Now using log macros (these will be optimized away):");
error!("This error will not appear");
warn!("This warning will not appear");
info!("This info will not appear");
debug!("This debug will not appear");
trace!("This trace will not appear");
simulate_service();
println!();
println!("Program completed!");
println!("Notice: The log macros produced no output despite the custom logger");
}
fn simulate_service() {
info!("Starting service simulation");
for i in 1..=5 {
debug!("Processing item {}", i);
if i % 2 == 0 {
warn!("Even number detected: {}", i);
}
if i == 3 {
error!("Simulated error at item {}", i);
}
}
info!("Service simulation completed");
}