tracing Crate Basics
use tracing::{info, instrument, span, Level};
#[instrument(skip(db), fields(user_id = %user_id))]
async fn get_tasks(user_id: &str, db: &Db) -> Result<Vec<Task>, Error> {
info!("fetching tasks");
let span = span!(Level::DEBUG, "db.query", table = "tasks");
let _enter = span.enter();
db.query_tasks(user_id).await
}
#[instrument] creates a span for the function scope.
fields(...) attaches structured key-value data to the span.