Macro woodpecker::wp_get_level [] [src]

macro_rules! wp_get_level {
    (^) => { ... };
    () => { ... };
    ($logger:expr) => { ... };
}

Gets the log level.

Returns global log level if called with ^ as an argument.

Returns log level according to the position (current path) if called without any argument.

Returns log level for the requested path when it's passed as an argument.

The log levels are hierarchical.

It means that if, for example, there's a rule that states that the module foo::bar has log level WARN, then all submodules inherit this log level. At the same time another rule may override the inherited level. For example, foo::bar::qux@xyz.rs has log level DEBUG.

If there's no exact match the rules of the parent are applied.

Example

#[macro_use]
extern crate woodpecker;
use woodpecker as wp;

fn main() {
    wp_init!();

    let logger = "foo::bar";

    assert_eq!(wp_get_level!(^), wp::LogLevel::WARN);
    assert_eq!(wp_get_level!(logger), wp::LogLevel::WARN);

    wp_set_level!(wp::LogLevel::INFO).unwrap();
    wp_set_level!(wp::LogLevel::CRITICAL, logger).unwrap();

    assert_eq!(wp_get_level!(^), wp::LogLevel::INFO);
    assert_eq!(wp_get_level!(logger), wp::LogLevel::CRITICAL);

    // Since the logs follow the hierarchy following statements are valid.
    assert_eq!(wp_get_level!("foo::bar::qux"), wp::LogLevel::CRITICAL);
    assert_eq!(wp_get_level!("foo"), wp::LogLevel::INFO);

    wp_set_level!(wp::LogLevel::CRITICAL, this_module!()).unwrap();
    assert_eq!(wp_get_level!(), wp::LogLevel::CRITICAL);

    wp_set_level!(wp::LogLevel::DEBUG, this_file!()).unwrap();
    assert_eq!(wp_get_level!(), wp::LogLevel::DEBUG);

    assert_eq!(wp_get_level!(^), wp::LogLevel::INFO);
    assert_eq!(wp_get_level!(this_module!()), wp::LogLevel::CRITICAL);
    assert_eq!(wp_get_level!(this_file!()), wp::LogLevel::DEBUG);
}