this post was submitted on 11 Jan 2024
4 points (100.0% liked)

Rust

5965 readers
24 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

[email protected]

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 1 year ago
MODERATORS
 

After adding some lines today to log some information I had missed that was vital for debugging I was wondering if there were any automated tools like linters or similar static analysis tools that help you identity the information to log and or return in error cases.

I am specifically talking about the information that should be identifiable automatically because it contributes to the control flow arriving in the current scope such as values of variables in the condition for the scope or parameters of functions that calculate those values (e.g. the file name in a permission error, the value of a variable that failed an if let or let else pattern match,...

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 5 points 10 months ago (1 children)

If you're not familiar with the tracing crate, give the instrument page a read. You may find the #[instrument(err)] part particularly useful.

As for the errors themselves, if you're using thiserror (you should be), then the variants in your error enum would/should contain the relevant context data. And the chain of errors would be tracked via source/#[source] fields, as explained in the crate docs. You can see such chains if you use anyhow in your application code.

[โ€“] [email protected] 1 points 10 months ago

I didn't know about #[instrument(err)] but in general I am well aware of the ways to log and return errors,

I am more concerned with ways to prevent myself from accidentally forgetting to log some relevant information until the first time that error is logged somewhere where I need to debug the actual problem and then having to essentially create a new version just to add that logging (if I am lucky enough for the error to be reproducible at all).