#event-logging #once #log-messages #macro #events #message #helper

log-once

Collection of helper macros for logging some events only once

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

#134 in Rust patterns

Download history 15845/week @ 2024-08-17 11858/week @ 2024-08-24 10291/week @ 2024-08-31 10495/week @ 2024-09-07 8574/week @ 2024-09-14 9877/week @ 2024-09-21 8704/week @ 2024-09-28 10515/week @ 2024-10-05 14318/week @ 2024-10-12 12242/week @ 2024-10-19 12965/week @ 2024-10-26 14657/week @ 2024-11-02 15343/week @ 2024-11-09 13446/week @ 2024-11-16 13733/week @ 2024-11-23 13852/week @ 2024-11-30

59,432 downloads per month
Used in 85 crates (4 directly)

MIT/Apache

13KB
125 lines

log-once

Tests Documentation Crates.io version

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

  1. Add it to your Cargo.toml file:
[dependencies]
log-once = "0.4"
  1. import the macros:
use log_once::{warn_once, log_once};
  1. 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