slog-try

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>

Current Release

docs.rs Crates.io Crates.io Crates.io codecov CI

Required dependencies

Add slog-try as a dependency in your Cargo.toml file.

toml [dependencies] slog-try = "1"

Project setup

Add use statements for the macros you wish to use:

rust use slog_try::try_info;

Usage example

Consider HasOptLogger, a data strcuture with an optionally attachable logger:

```rust

[derive(Default)]

struct HasOptLogger { logger: Option, } ```

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:

```rust let mut opt_logger = HasOptLogger { logger: None };

// Try to log even if no logger exist tryinfo!(optlogger.logger, "You won't see me output. The logger is None."; "opt" => "None"); tryinfo!(optlogger.logger, #"imatag", "You won't see me output. The logger is None."; "opt" => "None");

// Setup a Logger let plain = slogterm::PlainSyncDecorator::new(::std::io::stdout()); let logger = Logger::root(slogterm::FullFormat::new(plain) .build() .fuse(), o!("surname" => "Lava"));

opt_logger.logger = Some(logger);

// Call again with the new attached logger tryinfo!(optlogger.logger, "You will see me output!"; "opt" => "Some"); tryinfo!(optlogger.logger, #"imatag", "You will see me output!"; "opt" => "Some"); ```

Using a Discard Logger

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 ```rust use slog::{Logger, Discard, o};

fn main() { let logger = Logger::root(Discard, o!()); info!(logger, "nothing happens"); } ```