Expand description
§tracing_log_error
A utility crate to capture an error, and all its key error properties,
in a tracing event.
use tracing_log_error::log_error;
let e = std::io::Error::new(std::io::ErrorKind::Other, "My error");
log_error!(e, "The connection was dropped");The log_error! invocation captures:
- The
Displayrepresentation of the error, in theerror.messagefield. - The
Debugrepresentation of the error, in theerror.detailsfield. - The chain of error sources, in the
error.source_chainfield.
Using raw tracing, the equivalent would be:
use tracing::{event, Level};
use tracing_log_error::fields;
let e = std::io::Error::new(std::io::ErrorKind::Other, "My error");
event!(
Level::ERROR,
error.message = fields::error_message(&e),
error.details = fields::error_details(&e),
error.source_chain = fields::error_source_chain(&e),
"The connection was dropped"
);§Installation
To use log_error!, add both tracing and tracing_log_error to your Cargo.toml:
[dependencies]
tracing = "0.1"
tracing-log-error = "0.1"§Some errors don’t implement the Error trait
Some common error reporting types, like anyhow::Error or eyre::Report
or Box<dyn std::error::Error>, don’t implement the Error trait.
If you try to use log_error! with them directly, you’ll get a compiler error.
Good news: you can still use log_error! with them!
They dereference to a type that implements the Error trait, so you can
use * to dereference them when passing them to log_error!:
use tracing_log_error::log_error;
use anyhow::anyhow;
let e = anyhow!("Hey");
// Notice the `*` 👇
log_error!(*e, "An error occurred");§Advanced usage
Check out log_error!’s documentation for more examples and details.
You can customize the log level, add custom fields, and more.
Modules§
- fields
- Utilities to log common error properties with consistent naming and representations.
Macros§
- log_
error - A macro that desugars to an invocation of
tracing::event!with all error-related fields (the ones in thefieldsmodule) pre-populated.