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,…
If you’re not familiar with the
tracing
crate, give theinstrument
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 viasource
/[source]
fields, as explained in the crate docs. You can see such chains if you useanyhow
in your application code.