Comments (3)
Thanks. I got it to work now with updated versions.
use color_eyre::{eyre::{self, WrapErr}};
use tracing::{error, info, instrument};
use tracing_error::{ErrorLayer, SpanTrace};
use tracing_subscriber::prelude::*;
use tracing_error::prelude::*;
#[derive(Debug)]
struct FooError {
message: &'static str,
context: SpanTrace,
}
impl FooError {
fn new(message: &'static str) -> Self {
Self {
message,
context: SpanTrace::capture(),
}
}
}
impl std::error::Error for FooError {}
impl std::fmt::Display for FooError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.pad(self.message)?;
write!(f, "\n\nspan backtrace:\n{}", self.context)?;
// write!(f, "\n\ndebug span backtrace: {:?}", self.context)?;
// write!(f, "\n\nalt debug span backtrace: {:#?}", self.context)?;
Ok(())
}
}
#[instrument]
fn try_main(foo: &str) -> eyre::Result<(), eyre::Report> {
info!("Doing something");
do_another_thing(42, false)
}
#[instrument]
fn do_another_thing(answer: usize, will_succeed: bool) -> eyre::Result<(), eyre::Report> {
info!("trying to do other thing");
Err(FooError::new("something broke lol").in_current_span()).wrap_err_with(|| format!("this is additional message"))?;
Ok(())
}
#[instrument]
fn main() {
let json_fmt_layer = tracing_subscriber::fmt::Layer::new().json();
tracing_subscriber::registry()
.with(json_fmt_layer)
.with(ErrorLayer::default())
.init();
if let Err(e) = try_main("hello world") {
error!("error: {}", e);
std::process::exit(1);
}
}
With dependencies
[dependencies]
color-eyre = "0.5.11"
tracing = "0.1.29"
tracing-error = { version = "0.2.0", features = ["traced-error"] }
tracing-opentelemetry = "0.16.0"
tracing-subscriber = { version = "0.3.1", features = ["env-filter", "json", "fmt"] }
from color-eyre.
You probably need tracing-subscriber = "0.3.3"
to use tracing-error = "0.2.0"
. Also since this crate depends on tracing-error = "0.1.2"
, span traces wont work anyway (all code must depend on the same version of tracing-error, color-eyre would depend on 0.1.2 and the example would depend on 0.2.0).
from color-eyre.
Yea, I'm going to release an update that brings all the versions back into alignment, for now you need to depend on older versions of tracing/tracing-subscriber to make it keep working
from color-eyre.
Related Issues (20)
- Outdated documentation about color-backtrace
- How to access fields of a Report
- Attach Report's to an error via Section::error()
- Report creation takes a lock HOT 3
- Print a backtrace/spantrace to debug logs not to stderr HOT 1
- panic in tests (I used master) HOT 1
- Is there an easy way to make custom errors have equivalent report functions HOT 1
- show sections when panic macro is called HOT 1
- Output has few/no colors in Gnome Terminal
- should info! events be captured and printed as part of the SpanTrace? HOT 1
- Mechanism to add sections in hook callback
- Omit numbering of errors if there's only one HOT 2
- color-eyre uses the same inexplicable information order as standard backtraces HOT 1
- Automate synchronization between docs.rs and README.md
- Disable setting panic hook HOT 2
- Ergonomics: Full re-exports from `eyre`; export `color_eyre::eyre!` macro, rather than `eyre` crate HOT 2
- Add a config option to print panic output to stdout.
- First eyre::Result::Err variant is slow to construct if backtraces are enabled
- Construct a new `Handler` after already having created one / modify handler HOT 1
- Wrap types so we don't have to re-export `owo_colors` HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from color-eyre.