use fake_log::{
debug, error, info, log, log_enabled, logger, max_level, set_logger, set_max_level, trace,
warn, Level, LevelFilter, Log, Metadata, Record,
};
struct DummyLogger;
impl Log for DummyLogger {
fn enabled(&self, _metadata: &Metadata) -> bool {
false }
fn log(&self, _record: &Record) {
}
fn flush(&self) {
}
}
static DUMMY_LOGGER: DummyLogger = DummyLogger;
fn main() {
println!("=== Log Crate Compatibility Example ===");
println!("This example shows that fake-log has the same API as the log crate");
println!();
test_log_levels();
test_logger_operations();
test_log_macros();
test_log_enabled();
test_generic_log();
println!("All compatibility tests passed!");
println!("(All log calls were optimized away by fake-log)");
}
fn test_log_levels() {
println!("Testing log levels and filters...");
let levels = [
Level::Error,
Level::Warn,
Level::Info,
Level::Debug,
Level::Trace,
];
for level in &levels {
println!("Level: {:?}", level);
}
let filters = [
LevelFilter::Off,
LevelFilter::Error,
LevelFilter::Warn,
LevelFilter::Info,
LevelFilter::Debug,
LevelFilter::Trace,
];
for filter in &filters {
println!("Filter: {:?}", filter);
}
println!("Current max level: {:?}", max_level());
set_max_level(LevelFilter::Debug);
println!("After setting to Debug: {:?}", max_level());
println!();
}
fn test_logger_operations() {
println!("Testing logger operations...");
match set_logger(&DUMMY_LOGGER) {
Ok(()) => println!("Logger set successfully"),
Err(e) => println!("Failed to set logger: {}", e),
}
let current_logger = logger();
let metadata = Metadata::builder()
.level(Level::Info)
.target("test_module")
.build();
println!(
"Logger enabled for metadata: {}",
current_logger.enabled(&metadata)
);
let record = Record::builder()
.level(Level::Info)
.target("test_module")
.args(format_args!("Test message"))
.file(Some("compatibility.rs"))
.line(Some(42))
.module_path(Some("examples"))
.build();
current_logger.log(&record);
current_logger.flush();
println!();
}
fn test_log_macros() {
println!("Testing log macros (no output expected)...");
error!("Error message");
warn!("Warning message");
info!("Info message");
debug!("Debug message");
trace!("Trace message");
error!(target: "auth", "Authentication failed");
warn!(target: "network", "Network latency high");
info!(target: "app", "Application started");
debug!(target: "db", "Database query: SELECT * FROM users");
trace!(target: "parser", "Parsing token: {:?}", "identifier");
let user_id = 12345;
let username = "test_user";
let response_time = 150;
info!(
"User {} (ID: {}) request completed in {}ms",
username, user_id, response_time
);
debug!(
"Request details: user={}, time={}ms",
username, response_time
);
println!("Log macro test completed (no log output should appear above)");
println!();
}
fn test_log_enabled() {
println!("Testing log_enabled macro...");
println!("Error enabled: {}", log_enabled!(Level::Error));
println!("Warn enabled: {}", log_enabled!(Level::Warn));
println!("Info enabled: {}", log_enabled!(Level::Info));
println!("Debug enabled: {}", log_enabled!(Level::Debug));
println!("Trace enabled: {}", log_enabled!(Level::Trace));
println!(
"Info enabled for 'auth': {}",
log_enabled!(target: "auth", Level::Info)
);
if log_enabled!(Level::Debug) {
debug!("This debug message would be logged if enabled");
} else {
println!("Debug logging is disabled (expected with fake-log)");
}
println!();
}
fn test_generic_log() {
println!("Testing generic log! macro...");
log!(Level::Error, "Generic error message");
log!(Level::Info, "Generic info message with value: {}", 42);
log!(target: "system", Level::Warn, "Generic warning with target");
println!("Generic log macro test completed");
println!();
}