Crates.io | slog-try |
lib.rs | slog-try |
version | 1.0.2 |
source | src |
created_at | 2017-09-01 12:46:44.980582 |
updated_at | 2022-12-10 15:37:41.25922 |
description | Convenience macros for logging with an optional slog Logger. |
homepage | https://github.com/rustyhorde/slog-try |
repository | https://github.com/rustyhorde/slog-try |
max_upload_size | |
id | 30147 |
size | 35,643 |
Convenience macros for logging with an optional slog Logger.
NOTE - See the bottom of this README for another method of using a Logger that doesn't require Option<Logger>
Add slog-try
as a dependency in your Cargo.toml file.
[dependencies]
slog-try = "1"
Add use statements for the macros you wish to use:
use slog_try::try_info;
Consider HasOptLogger
, a data strcuture with an optionally attachable logger:
#[derive(Default)]
struct HasOptLogger {
logger: Option<Logger>,
}
The macros contained in slog-try
encapsulate the required boilerplate to use this logger without verifying whether the optional field actually contains a logger or not:
let mut opt_logger = HasOptLogger { logger: None };
// Try to log even if no logger exist
try_info!(opt_logger.logger, "You won't see me output. The logger is None."; "opt" => "None");
try_info!(opt_logger.logger, #"imatag", "You won't see me output. The logger is None."; "opt" => "None");
// Setup a `Logger`
let plain = slog_term::PlainSyncDecorator::new(::std::io::stdout());
let logger = Logger::root(slog_term::FullFormat::new(plain)
.build()
.fuse(), o!("surname" => "Lava"));
opt_logger.logger = Some(logger);
// Call again with the new attached logger
try_info!(opt_logger.logger, "You will see me output!"; "opt" => "Some");
try_info!(opt_logger.logger, #"imatag", "You will see me output!"; "opt" => "Some");
You can use slogs Discard
drain in lieu of the Option
wrapped logger. Like the try_*
macros, in case of a none present logger, the discarding logger is going to drop all incoming messages.
How to initialize a discarding logger
use slog::{Logger, Discard, o};
fn main() {
let logger = Logger::root(Discard, o!());
info!(logger, "nothing happens");
}