8 releases
0.4.1 | Jan 4, 2024 |
---|---|
0.4.0 | Sep 10, 2022 |
0.3.1 | Oct 13, 2019 |
0.3.0 | Dec 11, 2018 |
0.1.0 | Nov 25, 2016 |
#151 in Rust patterns
40,736 downloads per month
Used in 70 crates
(3 directly)
13KB
125 lines
log-once
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.
Usage
- Add it to your
Cargo.toml
file:
[dependencies]
log-once = "0.4"
- import the macros:
use log_once::{warn_once, log_once};
- Enjoy!
Examples
use log::info;
use log_once::{info_once, warn_once};
pub fn shave_the_yak(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: {err}, retrying");
}
}
}
}
}
License
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.
Dependencies
~87KB