Skip to main content

debug_span_guard

Macro debug_span_guard 

Source
debug_span_guard!() { /* proc-macro */ }
Expand description

Create a span at the debug level that can be started and completed manually.

See the SpanGuard::new for details on starting and completing the returned span.

Also see the guide for more details on manual span construction.

§Examples

§Creating spans

Note that debug_span_guard, info_span_guard, warn_span_guard, and error_span_guard use the same syntax.

Creating a span with captured properties in the template:

let x = 42;
let y = true;

let (span, guard) = emit::span_guard!("got {x} and {y}");

Creating a span with captured properties after the template:

let x = 42;
let y = true;

let (span, guard) = emit::span_guard!("something of note", x, y);

Specifying control parameters before the template (in this example, mdl):

let (span, guard) = emit::span_guard!(mdl: emit::path!("a::b"), "something of note");

§Entering the created span

Once a span is created, a block of code can be executed within it:

let (mut span, guard) = emit::span_guard!("manual span");

guard.call(move || {
    span.start();

    // Your code goes here
})

The call to span.start() must be within the call to guard.call (or the future passed to guard.in_future) otherwise the span will complete early, without its ambient context.

§Syntax

(control_param),* template_literal, (property),*

where

  • control_param: A Rust field-value with a pre-determined identifier (see below).
  • template_literal: A template string literal.
  • property: A Rust field-value for a property to capture.

§Control parameters

This macro accepts the following optional control parameters:

nametypedescription
rtimpl emit::runtime::RuntimeThe runtime to emit the event through.
mdlimpl Into<emit::Path>The module the event belongs to. If unspecified the current module path is used.
whenimpl emit::FilterA filter to use instead of the one configured on the runtime.
evt_propsimpl emit::PropsA set of properties to attach to the span guard that will appear on the emitted span event, but not pushed to the ambient context. The type that will appear on the SpanGuard is an anonymous wrapper that dereferences to the concrete type of evt_props.
namestrThe name of the span, carried in the well-known span_name property. If unspecified the template literal is used.
kindstr or emit::span::SpanKindThe kind of the span, carried in the well-known span_kind property. If unspecified the kind is left empty.
panic_lvlstr or emit::LevelDetect whether the function panics and use the given level if it does.

§Template literals

Templates are text literals that include regular text with holes. A hole is a point in the template where a property should be interpolated in.

  • template_literal: " (text | hole)* "
  • text: A fragment of plain text where { are escaped as {{ and } are escaped as }}.
  • hole: { property }
  • property: A Rust field-value expression.

The following are all examples of templates:

"some text"
 ├───────┘
 text
"some text and {x}"
 ├────────────┘ │
 text           property
"some {{text}} and {x: 42} and {y}"
 ├────────────────┘ ├───┘ └───┤ │
 text               property  │ property
                              text

See the guide for more details and examples of templates.

§Properties

Properties that appear within the template or after it are added to the emitted event. The identifier of the property is its key. Property capturing can be adjusted through the as_* attribute macros.

See the guide for more details on property capturing.

§Returns

A (SpanGuard, Frame<impl Ctxt>).