Collection of helper macros for logging some events only once.
This crate provide macro in the log_once
family (warn_once!
,
trace_once!
, ...); that only send a logging event once for every message.
It rely and uses the logging infrastructure in the log crate; and
is fully compatible with any logger implementation.
These macro will store the already seen messages in a BTreeSet
, and check
if a message is in the set before sending the log event.
1) Add it to your Cargo.toml
file:
toml
[dependencies]
log = "0.3"
log-once = "0.1"
2) import the macros:
```rust
extern crate log;
extern crate log_once; ```
3) Enjoy!
```rust
extern crate log;
extern crate log_once;
pub fn shavetheyak(yaks: &[Yak]) { for yak in yaks { info!(target: "yak_events", "Commencing yak shaving for {:?}", yak);
loop {
match find_a_razor() {
Ok(razor) => {
// This will only appear once in the logger output for each razor
info_once!("Razor located: {}", razor);
yak.shave(razor);
break;
}
Err(err) => {
// This will only appear once in the logger output for each error
warn_once!("Unable to locate a razor: {}, retrying", err);
}
}
}
}
} ```
log-once is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.