This crate provides .unwrap_or_log()
and .expect_or_log()
methods on Result
and Option
types that log failed unwraps to a [slog::Logger
]. This is useful when, for example, you have a syslog drain or a database drain, and you want your unwrap failures to show up there instead of being printed to stderr
.
Its API aims to mirror Rust's std
— see all the supported methods below. Failed unwraps are logged at a level of [Critical
].
Add the following to your Cargo.toml
:
toml
slog-unwrap = "0.9"
Next, bring the [ResultExt
] and/or [OptionExt
] traits into scope, and make use of the new logging methods.
```rust
use slog_unwrap::ResultExt;
let logger = slog::Logger::root(slog::Discard, slog::o!()); let not_great: Result<(), _> = Result::Err("not terrible");
// Logs the failed unwrap to logger
and panics
notgreat.unwrapor_log(&logger);
```
| std
method | slog-unwrap
form | trait |
|--------------------------------| ----------------------------------------|---------------|
| [Result::unwrap()
] | [Result::unwrap_or_log(&log)
] | [ResultExt
] |
| [Result::expect(msg)
] | [Result::expect_or_log(&log, msg)
] | [ResultExt
] |
| [Result::unwrap_err()
] | [Result::unwrap_err_or_log(&log)
] | [ResultExt
] |
| [Result::expect_err(msg)
] | [Result::expect_err_or_log(&log, msg)
] | [ResultExt
] |
| [Option::unwrap()
] | [Option::unwrap_or_log(&log)
] | [OptionExt
] |
| [Option::expect(msg)
] | [Option::expect_or_log(&log, msg)
] | [OptionExt
] |
| [Option::unwrap_none()
]† | [Option::unwrap_none_or_log(&log)
] | [OptionExt
] |
| [Option::expect_none(msg)
]† | [Option::expect_none_or_log(&log, msg)
] | [OptionExt
] |
†: unstable in std
Note: enabling the scope
feature drops the &log
argument from all methods.
panic-quiet
: causes failed unwraps to panic with an empty message.Cargo.toml
as follows:slog-unwrap = { version = "0.9", default-features = false }
scope
: adds support for slog-scope
, which removes the need to pass a [slog::Logger
] to the various methods.See slog-unwraps, another crate with a similar featureset.