Macro log

macro_rules! log {
    (logger: $logger:expr, target: $target:expr, $lvl:expr, $($arg:tt)+) => { ... };
    (logger: $logger:expr, $lvl:expr, $($arg:tt)+) => { ... };
    (target: $target:expr, $lvl:expr, $($arg:tt)+) => { ... };
    ($lvl:expr, $($arg:tt)+) => { ... };
}

The standard logging macro.

This macro will generically log with the specified Level and format! based argument list.

use log::{log, Level};

let data = (42, "Forty-two");
let private_data = "private";

log!(Level::Error, "Received errors: {}, {}", data.0, data.1);

Optionally, you can specify a target argument to attach a specific target to the log record. By default, the target is the module path of the caller.

use log::{log, Level};

let data = (42, "Forty-two");
let private_data = "private";

log!(
    target: "app_events",
    Level::Error,
    "Received errors: {}, {}",
    data.0, data.1
);

And optionally, you can specify a logger argument to use a specific logger instead of the default global logger.

# struct MyLogger {}
# impl Log for MyLogger {
#     fn enabled(&self, _metadata: &log::Metadata) -> bool {
#         false
#     }
#     fn log(&self, _record: &log::Record) {}
#     fn flush(&self) {}
# }
use log::{log, Level, Log};

let data = (42, "Forty-two");
let private_data = "private";

let my_logger = MyLogger {};
log!(
    logger: my_logger,
    Level::Error,
    "Received errors: {}, {}",
    data.0, data.1
);

The logger argument accepts a value that implements the Log trait. The value will be borrowed within the macro.

Note that the global level set via Cargo features, or through set_max_level will still apply, even when a custom logger is supplied with the logger argument.