# fake-log
A fake logging library that provides the same interface as Rust's `log` crate but with no-op implementations. Designed specifically for embedded scenarios where reducing memory footprint is critical.
### Features
- 🚀 **Zero Overhead**: All logging macros are optimized away at compile time
- 📦 **Full Compatibility**: Provides exactly the same API as the `log` crate
- 🔧 **No Dependencies**: Supports `no_std` environments with minimal dependencies
- âš¡ **Compile-time Optimization**: Supports compile-time log level filtering
- 🎯 **Embedded Friendly**: Designed specifically for embedded and resource-constrained environments
### Use Cases
- Embedded systems where memory usage needs to be minimized
- Production environments where logging should be completely disabled
- Testing environments where log output would be distracting
- Library development with optional logging support
### Installation
Add to your `Cargo.toml`:
```toml
[dependencies]
fake-log = "0.1"
```
### Basic Usage
#### Drop-in Replacement for log crate
If your project already uses the `log` crate, you can quickly replace it:
```toml
[dependencies]
# log = "0.4" # Comment out the original log dependency
fake-log = { version = "0.1", package = "log" } # Use fake-log as replacement
```
Your existing code requires no changes.
#### Direct Usage
```rust
extern crate fake_log as log;
fn main() {
// These calls produce no output and allocate no memory
log::info!("Application started");
log::debug!("Debug info: {}", 42);
log::error!("Error message");
log::warn!("Warning message");
log::trace!("Trace message");
// Support for target parameter
log::info!(target: "my_module", "Module-specific log");
}
```
### Comparison with log crate
| Runtime overhead | Small overhead | Zero overhead |
| Memory allocation | May allocate | Zero allocation |
| Binary size | Slightly larger | Minimal |
| Configuration complexity | Requires Logger setup | No configuration needed |
| Embedded support | Good | Excellent |
### Examples
See complete examples in the `examples/` directory:
```bash
cargo run --example basic
cargo run --example no_std
cargo run --example custom_logger
```
### no_std Support
fake-log fully supports `no_std` environments:
```rust
#![no_std]
use fake_log::{info, error};
fn embedded_function() {
info!("Running in no_std environment");
error!("Error handling");
}
```
fake-log should perform best in all scenarios since it does nothing.
### License
This project is licensed under MIT OR Apache-2.0, consistent with the Rust ecosystem.
### Contributing
Issues and pull requests are welcome!
### FAQ
**Q: Why do I need fake-log?**
A: In embedded systems, even the lightest logging libraries can consume precious stack memory resources. fake-log provides a completely zero-overhead solution.
**Q: Can I switch to real logging at runtime?**
A: No. fake-log is designed for compile-time optimization, and all log calls are removed at compile time.
**Q: How can I use real logging during development and fake-log in production?**
A: You can use Cargo features and conditional compilation to achieve this switching.
### Related Projects
- [log](https://crates.io/crates/log) - Rust's standard logging facade
- [env_logger](https://crates.io/crates/env_logger) - Environment variable configured logger
- [slog](https://crates.io/crates/slog) - Structured logging library