Attribute Macro instrument
#[instrument]Expand description
An attribute macro designed to eliminate boilerplate code.
This macro automatically creates a span for the annotated function. The span name defaults to
the function name but can be customized by passing a string literal as an argument using the
name parameter.
The #[trace] attribute requires a local parent context to function correctly. Ensure that
the function annotated with #[trace] is called within a local context of a Span, which
is established by invoking the Span::set_local_parent() method.
§Arguments
name- The name of the span. Defaults to the full path of the function.short_name- Whether to use the function name without path as the span name. Defaults tofalse.properties- A list of key-value pairs to be added as properties to the span. The value can be a format string, where the function arguments are accessible. Defaults to{}.
§Examples
use veecle_telemetry::instrument;
#[veecle_telemetry::instrument]
fn simple() {
// ...
}
#[veecle_telemetry::instrument(short_name = true)]
async fn simple_async() {
// ...
}
#[veecle_telemetry::instrument(properties = { "k1": "v1", "a": 2 })]
async fn properties(a: u64) {
// ...
}The code snippets above will be expanded to:
fn simple() {
let __guard__ = Span::new("example::simple", &[]).entered();
// ...
}
async fn simple_async() {
veecle_telemetry::future::FutureExt::with_span(
async move {
// ...
},
veecle_telemetry::Span::new("simple_async", &[]),
)
.await
}
async fn properties(a: u64) {
veecle_telemetry::future::FutureExt::with_span(
async move {
// ...
},
veecle_telemetry::Span::new("example::properties", &[
KeyValue::new("k1", "v1"),
KeyValue::new("a", 2),
]),
)
.await
}