HASH tracing and instrumentation practices for Rust. Use when adding spans, events, or #[tracing::instrument] to Rust code.
68
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
info!, debug!, trace!, warn!, error!Display, using %error or error = %errorerror_stack::Report<Context> with Debug, using ?report or error = ?report on the complete report rather than its current_context() aloneThese fragments assume a local user. Their error events are alternatives: e is an ordinary error value, and report is an error_stack::Report<_>.
tracing::info!(user_id = user.id, action = "login", "user logged in successfully");
tracing::error!(error = %e, user_id = user.id, "failed to authenticate user");
tracing::error!(error = ?report, user_id = user.id, "failed to authenticate user");A report's plain Display stops after the first context and omits attachments. Its Debug formatter traverses the frames and renders printable attachments or installed hook output.
#[tracing::instrument] attribute to functions to automatically create trace spanserr for an ordinary error and err(Debug) for an error_stack::Report<Context>skip(password) or skip_allfields(request_id = req.id())#[tracing::instrument(level = "debug", err, skip(password), fields(user_id = user.id))]
async fn authenticate_user(user: &User, password: &[u8]) -> Result<AuthToken, AuthError> {
// Implementation
}a6f5727
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.