use tracing::{info, warn};
use tracing_subscriber::prelude::*;
use tracing_throttle::{Policy, TracingRateLimitLayer};
fn main() {
let rate_limit_layer = TracingRateLimitLayer::builder()
.with_policy(Policy::count_based(3).unwrap())
.with_excluded_fields(vec!["iteration".to_string()])
.build()
.unwrap();
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer().with_filter(rate_limit_layer))
.init();
println!("=== Basic Rate Limiting Example ===\n");
println!("Policy: Allow first 3 occurrences, then suppress\n");
println!("Emitting 10 identical INFO messages:");
for i in 1..=10 {
info!(iteration = i, "This is a repeated log message");
}
println!("\n");
println!("Emitting 10 identical WARN messages (different signature):");
for i in 1..=10 {
warn!(iteration = i, "This is a repeated warning message");
}
println!("\n");
println!("Emitting different messages (each has its own limit):");
for i in 1..=5 {
info!(iteration = i, "Message A");
info!(iteration = i, "Message B");
info!(iteration = i, "Message C");
}
println!("\n=== Example Complete ===");
println!("Notice: Only the first 3 occurrences of each unique message are shown.");
}