Crate log_once [] [src]

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 static BTreeSet, and check if a message is in the set before sending the log event.

Examples

#[macro_use]
extern crate log;
#[macro_use]
extern crate log_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: {}, retrying", err);
                }
            }
        }
    }
}

Macros

debug_once

Logs a message once at the debug level.

error_once

Logs a message once at the error level.

info_once

Logs a message once at the info level.

log_once

Standard logging macro, logging events once for each arguments.

trace_once

Logs a message once at the trace level.

warn_once

Logs a message once at the warn level.

Enums

Level

An enum representing the available verbosity levels of the logger.