1 /// Constructs a new span.
3 /// See [the top-level documentation][lib] for details on the syntax accepted by
6 /// [lib]: index.html#using-the-macros
10 /// Creating a new span:
12 /// # use tracing::{span, Level};
14 /// let span = span!(Level::TRACE, "my span");
15 /// let _enter = span.enter();
16 /// // do work inside the span...
21 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
) => {
22 $
crate::span
!(target
: $target
, parent
: $parent
, $lvl
, $name
,)
24 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
25 $
crate::__tracing_mk_span
!(target
: $target
, parent
: $parent
, $lvl
, $name
, $
($fields
)*)
27 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
28 $
crate::__tracing_mk_span
!(target
: $target
, $lvl
, $name
, $
($fields
)*)
30 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
) => {
31 $
crate::span
!(target
: $target
, parent
: $parent
, $lvl
, $name
,)
33 (parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
35 target
: module_path
!(),
42 (parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
) => {
44 target
: module_path
!(),
50 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
58 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
) => {
59 $
crate::span
!(target
: $target
, $lvl
, $name
,)
61 ($lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
63 target
: module_path
!(),
69 ($lvl
:expr
, $name
:expr
) => {
71 target
: module_path
!(),
78 /// Constructs a span at the trace level.
80 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
83 /// See [the top-level documentation][lib] for details on the syntax accepted by
86 /// [lib]: index.html#using-the-macros
87 /// [attributes]: index.html#configuring-attributes
88 /// [Fields]: index.html#recording-fields
89 /// [`span!`]: macro.span.html
94 /// # use tracing::{trace_span, span, Level};
96 /// trace_span!("my_span");
97 /// // is equivalent to:
98 /// span!(Level::TRACE, "my_span");
103 /// # use tracing::{trace_span, span, Level};
105 /// let span = trace_span!("my span");
106 /// span.in_scope(|| {
107 /// // do work inside the span...
112 macro_rules
! trace_span
{
113 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
117 $
crate::Level
::TRACE
,
122 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
123 $
crate::trace_span
!(target
: $target
, parent
: $parent
, $name
,)
125 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
127 target
: module_path
!(),
129 $
crate::Level
::TRACE
,
134 (parent
: $parent
:expr
, $name
:expr
) => {
135 $
crate::trace_span
!(parent
: $parent
, $name
,)
137 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
140 $
crate::Level
::TRACE
,
145 (target
: $target
:expr
, $name
:expr
) => {
146 $
crate::trace_span
!(target
: $target
, $name
,)
148 ($name
:expr
, $
($field
:tt
)*) => {
150 target
: module_path
!(),
151 $
crate::Level
::TRACE
,
156 ($name
:expr
) => { $crate::trace_span!($name,) }
;
159 /// Constructs a span at the debug level.
161 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
164 /// See [the top-level documentation][lib] for details on the syntax accepted by
167 /// [lib]: index.html#using-the-macros
168 /// [attributes]: index.html#configuring-attributes
169 /// [Fields]: index.html#recording-fields
170 /// [`span!`]: macro.span.html
175 /// # use tracing::{debug_span, span, Level};
177 /// debug_span!("my_span");
178 /// // is equivalent to:
179 /// span!(Level::DEBUG, "my_span");
184 /// # use tracing::debug_span;
186 /// let span = debug_span!("my span");
187 /// span.in_scope(|| {
188 /// // do work inside the span...
193 macro_rules
! debug_span
{
194 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
198 $
crate::Level
::DEBUG
,
203 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
204 $
crate::debug_span
!(target
: $target
, parent
: $parent
, $name
,)
206 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
208 target
: module_path
!(),
210 $
crate::Level
::DEBUG
,
215 (parent
: $parent
:expr
, $name
:expr
) => {
216 $
crate::debug_span
!(parent
: $parent
, $name
,)
218 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
221 $
crate::Level
::DEBUG
,
226 (target
: $target
:expr
, $name
:expr
) => {
227 $
crate::debug_span
!(target
: $target
, $name
,)
229 ($name
:expr
, $
($field
:tt
)*) => {
231 target
: module_path
!(),
232 $
crate::Level
::DEBUG
,
237 ($name
:expr
) => {$crate::debug_span!($name,)}
;
240 /// Constructs a span at the info level.
242 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
245 /// See [the top-level documentation][lib] for details on the syntax accepted by
248 /// [lib]: index.html#using-the-macros
249 /// [attributes]: index.html#configuring-attributes
250 /// [Fields]: index.html#recording-fields
251 /// [`span!`]: macro.span.html
256 /// # use tracing::{span, info_span, Level};
258 /// info_span!("my_span");
259 /// // is equivalent to:
260 /// span!(Level::INFO, "my_span");
265 /// # use tracing::info_span;
267 /// let span = info_span!("my span");
268 /// span.in_scope(|| {
269 /// // do work inside the span...
274 macro_rules
! info_span
{
275 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
284 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
285 $
crate::info_span
!(target
: $target
, parent
: $parent
, $name
,)
287 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
289 target
: module_path
!(),
296 (parent
: $parent
:expr
, $name
:expr
) => {
297 $
crate::info_span
!(parent
: $parent
, $name
,)
299 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
307 (target
: $target
:expr
, $name
:expr
) => {
308 $
crate::info_span
!(target
: $target
, $name
,)
310 ($name
:expr
, $
($field
:tt
)*) => {
312 target
: module_path
!(),
318 ($name
:expr
) => {$crate::info_span!($name,)}
;
321 /// Constructs a span at the warn level.
323 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
326 /// See [the top-level documentation][lib] for details on the syntax accepted by
329 /// [lib]: index.html#using-the-macros
330 /// [attributes]: index.html#configuring-attributes
331 /// [Fields]: index.html#recording-fields
332 /// [`span!`]: macro.span.html
337 /// # use tracing::{warn_span, span, Level};
339 /// warn_span!("my_span");
340 /// // is equivalent to:
341 /// span!(Level::WARN, "my_span");
346 /// use tracing::warn_span;
348 /// let span = warn_span!("my span");
349 /// span.in_scope(|| {
350 /// // do work inside the span...
355 macro_rules
! warn_span
{
356 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
365 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
366 $
crate::warn_span
!(target
: $target
, parent
: $parent
, $name
,)
368 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
370 target
: module_path
!(),
377 (parent
: $parent
:expr
, $name
:expr
) => {
378 $
crate::warn_span
!(parent
: $parent
, $name
,)
380 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
388 (target
: $target
:expr
, $name
:expr
) => {
389 $
crate::warn_span
!(target
: $target
, $name
,)
391 ($name
:expr
, $
($field
:tt
)*) => {
393 target
: module_path
!(),
399 ($name
:expr
) => {$crate::warn_span!($name,)}
;
401 /// Constructs a span at the error level.
403 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
406 /// See [the top-level documentation][lib] for details on the syntax accepted by
409 /// [lib]: index.html#using-the-macros
410 /// [attributes]: index.html#configuring-attributes
411 /// [Fields]: index.html#recording-fields
412 /// [`span!`]: macro.span.html
417 /// # use tracing::{span, error_span, Level};
419 /// error_span!("my_span");
420 /// // is equivalent to:
421 /// span!(Level::ERROR, "my_span");
426 /// # use tracing::error_span;
428 /// let span = error_span!("my span");
429 /// span.in_scope(|| {
430 /// // do work inside the span...
435 macro_rules
! error_span
{
436 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
440 $
crate::Level
::ERROR
,
445 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
446 $
crate::error_span
!(target
: $target
, parent
: $parent
, $name
,)
448 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
450 target
: module_path
!(),
452 $
crate::Level
::ERROR
,
457 (parent
: $parent
:expr
, $name
:expr
) => {
458 $
crate::error_span
!(parent
: $parent
, $name
,)
460 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
463 $
crate::Level
::ERROR
,
468 (target
: $target
:expr
, $name
:expr
) => {
469 $
crate::error_span
!(target
: $target
, $name
,)
471 ($name
:expr
, $
($field
:tt
)*) => {
473 target
: module_path
!(),
474 $
crate::Level
::ERROR
,
479 ($name
:expr
) => {$crate::error_span!($name,)}
;
482 /// Constructs a new `Event`.
484 /// The event macro is invoked with a `Level` and up to 32 key-value fields.
485 /// Optionally, a format string and arguments may follow the fields; this will
486 /// be used to construct an implicit field named "message".
488 /// See [the top-level documentation][lib] for details on the syntax accepted by
491 /// [lib]: index.html#using-the-macros
496 /// use tracing::{event, Level};
499 /// let data = (42, "forty-two");
500 /// let private_data = "private";
501 /// let error = "a bad error";
503 /// event!(Level::ERROR, %error, "Received error");
505 /// target: "app_events",
509 /// "App warning: {}",
512 /// event!(Level::INFO, the_answer = data.0);
516 // /// Note that *unlike `span!`*, `event!` requires a value for all fields. As
517 // /// events are recorded immediately when the macro is invoked, there is no
518 // /// opportunity for fields to be recorded later. A trailing comma on the final
519 // /// field is valid.
521 // /// For example, the following does not compile:
522 // /// ```rust,compile_fail
523 // /// # #[macro_use]
524 // /// # extern crate tracing;
525 // /// # use tracing::Level;
527 // /// event!(Level::INFO, foo = 5, bad_field, bar = "hello")
532 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
)=> (
533 $
crate::__tracing_log
!(
539 if $
crate::level_enabled
!($lvl
) {
540 use $
crate::__macro_support
::*;
541 let callsite
= $
crate::callsite
! {
548 kind
: $
crate::metadata
::Kind
::EVENT
,
553 if callsite
.is_enabled() {
554 let meta
= callsite
.metadata();
555 $
crate::Event
::child_of($parent
, meta
, &$
crate::valueset
!(meta
.fields(), $
($fields
)*) );
560 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
565 { message = format_args!($($arg)+), $($fields)* }
568 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $
($k
:ident
).+ = $
($fields
:tt
)* ) => (
569 $
crate::event
!(target
: $target
, parent
: $parent
, $lvl
, { $($k).+ = $($fields)* }
)
571 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $
($arg
:tt
)+) => (
572 $
crate::event
!(target
: $target
, parent
: $parent
, $lvl
, { $($arg)+ }
)
574 (target
: $target
:expr
, $lvl
:expr
, { $($fields:tt)* }
)=> ({
575 $
crate::__tracing_log
!(
580 if $
crate::level_enabled
!($lvl
) {
581 use $
crate::__macro_support
::*;
582 let callsite
= $
crate::callsite
! {
589 kind
: $
crate::metadata
::Kind
::EVENT
,
594 if callsite
.is_enabled() {
595 let meta
= callsite
.metadata();
596 $
crate::Event
::dispatch(meta
, &$
crate::valueset
!(meta
.fields(), $
($fields
)*) );
600 (target
: $target
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
604 { message = format_args!($($arg)+), $($fields)* }
607 (target
: $target
:expr
, $lvl
:expr
, $
($k
:ident
).+ = $
($fields
:tt
)* ) => (
608 $
crate::event
!(target
: $target
, $lvl
, { $($k).+ = $($fields)* }
)
610 (target
: $target
:expr
, $lvl
:expr
, $
($arg
:tt
)+ ) => (
611 $
crate::event
!(target
: $target
, $lvl
, { $($arg)+ }
)
613 (parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
615 target
: module_path
!(),
618 { message = format_args!($($arg)+), $($fields)* }
621 (parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
623 target
: module_path
!(),
626 { message = format_args!($($arg)+), $($fields)* }
629 (parent
: $parent
:expr
, $lvl
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
631 target
: module_path
!(),
634 { $($k).+ = $($field)*}
637 (parent
: $parent
:expr
, $lvl
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
639 target
: module_path
!(),
642 { ?$($k).+ = $($field)*}
645 (parent
: $parent
:expr
, $lvl
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
647 target
: module_path
!(),
650 { %$($k).+ = $($field)*}
653 (parent
: $parent
:expr
, $lvl
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
655 target
: module_path
!(),
658 { $($k).+, $($field)*}
661 (parent
: $parent
:expr
, $lvl
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
663 target
: module_path
!(),
666 { %$($k).+, $($field)*}
669 (parent
: $parent
:expr
, $lvl
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
671 target
: module_path
!(),
674 { ?$($k).+, $($field)*}
677 (parent
: $parent
:expr
, $lvl
:expr
, $
($arg
:tt
)+ ) => (
678 $
crate::event
!(target
: module_path
!(), parent
: $parent
, $lvl
, { $($arg)+ }
)
680 ( $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
682 target
: module_path
!(),
684 { message = format_args!($($arg)+), $($fields)* }
687 ( $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
689 target
: module_path
!(),
691 { message = format_args!($($arg)+), $($fields)* }
694 ($lvl
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
696 target
: module_path
!(),
698 { $($k).+ = $($field)*}
701 ($lvl
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
703 target
: module_path
!(),
705 { $($k).+, $($field)*}
708 ($lvl
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
710 target
: module_path
!(),
712 { ?$($k).+, $($field)*}
715 ($lvl
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
717 target
: module_path
!(),
719 { %$($k).+, $($field)*}
722 ($lvl
:expr
, ?$
($k
:ident
).+) => (
723 $
crate::event
!($lvl
, ?$
($k
).+,)
725 ($lvl
:expr
, %$
($k
:ident
).+) => (
726 $
crate::event
!($lvl
, %$
($k
).+,)
728 ($lvl
:expr
, $
($k
:ident
).+) => (
729 $
crate::event
!($lvl
, $
($k
).+,)
731 ( $lvl
:expr
, $
($arg
:tt
)+ ) => (
732 $
crate::event
!(target
: module_path
!(), $lvl
, { $($arg)+ }
)
736 /// Constructs an event at the trace level.
738 /// This functions similarly to the [`event!`] macro. See [the top-level
739 /// documentation][lib] for details on the syntax accepted by
742 /// [`event!`]: macro.event.html
743 /// [lib]: index.html#using-the-macros
748 /// use tracing::trace;
749 /// # #[derive(Debug, Copy, Clone)] struct Position { x: f32, y: f32 }
750 /// # impl Position {
751 /// # const ORIGIN: Self = Self { x: 0.0, y: 0.0 };
752 /// # fn dist(&self, other: Position) -> f32 {
753 /// # let x = (other.x - self.x).exp2(); let y = (self.y - other.y).exp2();
758 /// let pos = Position { x: 3.234, y: -1.223 };
759 /// let origin_dist = pos.dist(Position::ORIGIN);
761 /// trace!(position = ?pos, ?origin_dist);
763 /// target: "app_events",
765 /// "x is {} and y is {}",
766 /// if pos.x >= 0.0 { "positive" } else { "negative" },
767 /// if pos.y >= 0.0 { "positive" } else { "negative" }
773 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
774 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($field)* }
, $
($arg
)*)
776 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
777 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
779 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
780 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
782 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
783 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
785 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
786 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, {}
, $
($arg
)+)
788 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
790 target
: module_path
!(),
792 $
crate::Level
::TRACE
,
797 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
799 target
: module_path
!(),
801 $
crate::Level
::TRACE
,
802 { $($k).+ = $($field)*}
805 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
807 target
: module_path
!(),
809 $
crate::Level
::TRACE
,
810 { ?$($k).+ = $($field)*}
813 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
815 target
: module_path
!(),
817 $
crate::Level
::TRACE
,
818 { %$($k).+ = $($field)*}
821 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
823 target
: module_path
!(),
825 $
crate::Level
::TRACE
,
826 { $($k).+, $($field)*}
829 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
831 target
: module_path
!(),
833 $
crate::Level
::TRACE
,
834 { ?$($k).+, $($field)*}
837 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
839 target
: module_path
!(),
841 $
crate::Level
::TRACE
,
842 { %$($k).+, $($field)*}
845 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
847 target
: module_path
!(),
849 $
crate::Level
::TRACE
,
854 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
855 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { $($field)* }
, $
($arg
)*)
857 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
858 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
860 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
861 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
863 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
864 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
866 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
867 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, {}
, $
($arg
)+)
869 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
871 target
: module_path
!(),
872 $
crate::Level
::TRACE
,
877 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
879 target
: module_path
!(),
880 $
crate::Level
::TRACE
,
881 { $($k).+ = $($field)*}
884 ($
($k
:ident
).+, $
($field
:tt
)*) => (
886 target
: module_path
!(),
887 $
crate::Level
::TRACE
,
888 { $($k).+, $($field)*}
891 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
893 target
: module_path
!(),
894 $
crate::Level
::TRACE
,
895 { ?$($k).+, $($field)*}
898 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
900 target
: module_path
!(),
901 $
crate::Level
::TRACE
,
902 { %$($k).+, $($field)*}
905 (?$
($k
:ident
).+) => (
907 target
: module_path
!(),
908 $
crate::Level
::TRACE
,
912 (%$
($k
:ident
).+) => (
914 target
: module_path
!(),
915 $
crate::Level
::TRACE
,
921 target
: module_path
!(),
922 $
crate::Level
::TRACE
,
928 target
: module_path
!(),
929 $
crate::Level
::TRACE
,
936 /// Constructs an event at the debug level.
938 /// This functions similarly to the [`event!`] macro. See [the top-level
939 /// documentation][lib] for details on the syntax accepted by
942 /// [`event!`]: macro.event.html
943 /// [lib]: index.html#using-the-macros
948 /// use tracing::debug;
950 /// # #[derive(Debug)] struct Position { x: f32, y: f32 }
952 /// let pos = Position { x: 3.234, y: -1.223 };
954 /// debug!(?pos.x, ?pos.y);
955 /// debug!(target: "app_events", position = ?pos, "New position");
960 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
961 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($field)* }
, $
($arg
)*)
963 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
964 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
966 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
967 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
969 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
970 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
972 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
973 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, {}
, $
($arg
)+)
975 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
977 target
: module_path
!(),
979 $
crate::Level
::DEBUG
,
984 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
986 target
: module_path
!(),
988 $
crate::Level
::DEBUG
,
989 { $($k).+ = $($field)*}
992 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
994 target
: module_path
!(),
996 $
crate::Level
::DEBUG
,
997 { ?$($k).+ = $($field)*}
1000 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1002 target
: module_path
!(),
1004 $
crate::Level
::DEBUG
,
1005 { %$($k).+ = $($field)*}
1008 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1010 target
: module_path
!(),
1012 $
crate::Level
::DEBUG
,
1013 { $($k).+, $($field)*}
1016 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1018 target
: module_path
!(),
1020 $
crate::Level
::DEBUG
,
1021 { ?$($k).+, $($field)*}
1024 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1026 target
: module_path
!(),
1028 $
crate::Level
::DEBUG
,
1029 { %$($k).+, $($field)*}
1032 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1034 target
: module_path
!(),
1036 $
crate::Level
::DEBUG
,
1041 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1042 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { $($field)* }
, $
($arg
)*)
1044 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1045 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
1047 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1048 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
1050 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1051 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
1053 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1054 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, {}
, $
($arg
)+)
1056 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1058 target
: module_path
!(),
1059 $
crate::Level
::DEBUG
,
1064 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1066 target
: module_path
!(),
1067 $
crate::Level
::DEBUG
,
1068 { $($k).+ = $($field)*}
1071 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1073 target
: module_path
!(),
1074 $
crate::Level
::DEBUG
,
1075 { ?$($k).+ = $($field)*}
1078 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1080 target
: module_path
!(),
1081 $
crate::Level
::DEBUG
,
1082 { %$($k).+ = $($field)*}
1085 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1087 target
: module_path
!(),
1088 $
crate::Level
::DEBUG
,
1089 { $($k).+, $($field)*}
1092 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1094 target
: module_path
!(),
1095 $
crate::Level
::DEBUG
,
1096 { ?$($k).+, $($field)*}
1099 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1101 target
: module_path
!(),
1102 $
crate::Level
::DEBUG
,
1103 { %$($k).+, $($field)*}
1106 (?$
($k
:ident
).+) => (
1108 target
: module_path
!(),
1109 $
crate::Level
::DEBUG
,
1113 (%$
($k
:ident
).+) => (
1115 target
: module_path
!(),
1116 $
crate::Level
::DEBUG
,
1120 ($
($k
:ident
).+) => (
1122 target
: module_path
!(),
1123 $
crate::Level
::DEBUG
,
1129 target
: module_path
!(),
1130 $
crate::Level
::DEBUG
,
1137 /// Constructs an event at the info level.
1139 /// This functions similarly to the [`event!`] macro. See [the top-level
1140 /// documentation][lib] for details on the syntax accepted by
1143 /// [`event!`]: macro.event.html
1144 /// [lib]: index.html#using-the-macros
1149 /// use tracing::info;
1150 /// # // this is so the test will still work in no-std mode
1151 /// # #[derive(Debug)]
1152 /// # pub struct Ipv4Addr;
1153 /// # impl Ipv4Addr { fn new(o1: u8, o2: u8, o3: u8, o4: u8) -> Self { Self } }
1155 /// # struct Connection { port: u32, speed: f32 }
1156 /// use tracing::field;
1158 /// let addr = Ipv4Addr::new(127, 0, 0, 1);
1159 /// let conn = Connection { port: 40, speed: 3.20 };
1161 /// info!(conn.port, "connected to {:?}", addr);
1163 /// target: "connection_events",
1172 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1173 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($field)* }
, $
($arg
)*)
1175 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1176 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1178 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1179 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1181 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1182 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1184 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1185 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, {}
, $
($arg
)+)
1187 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1189 target
: module_path
!(),
1191 $
crate::Level
::INFO
,
1196 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1198 target
: module_path
!(),
1200 $
crate::Level
::INFO
,
1201 { $($k).+ = $($field)*}
1204 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1206 target
: module_path
!(),
1208 $
crate::Level
::INFO
,
1209 { ?$($k).+ = $($field)*}
1212 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1214 target
: module_path
!(),
1216 $
crate::Level
::INFO
,
1217 { %$($k).+ = $($field)*}
1220 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1222 target
: module_path
!(),
1224 $
crate::Level
::INFO
,
1225 { $($k).+, $($field)*}
1228 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1230 target
: module_path
!(),
1232 $
crate::Level
::INFO
,
1233 { ?$($k).+, $($field)*}
1236 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1238 target
: module_path
!(),
1240 $
crate::Level
::INFO
,
1241 { %$($k).+, $($field)*}
1244 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1246 target
: module_path
!(),
1248 $
crate::Level
::INFO
,
1253 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1254 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($field)* }
, $
($arg
)*)
1256 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1257 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1259 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1260 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1262 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1263 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1265 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1266 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, {}
, $
($arg
)+)
1268 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1270 target
: module_path
!(),
1271 $
crate::Level
::INFO
,
1276 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1278 target
: module_path
!(),
1279 $
crate::Level
::INFO
,
1280 { $($k).+ = $($field)*}
1283 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1285 target
: module_path
!(),
1286 $
crate::Level
::INFO
,
1287 { ?$($k).+ = $($field)*}
1290 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1292 target
: module_path
!(),
1293 $
crate::Level
::TRACE
,
1294 { %$($k).+ = $($field)*}
1297 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1299 target
: module_path
!(),
1300 $
crate::Level
::INFO
,
1301 { $($k).+, $($field)*}
1304 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1306 target
: module_path
!(),
1307 $
crate::Level
::INFO
,
1308 { ?$($k).+, $($field)*}
1311 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1313 target
: module_path
!(),
1314 $
crate::Level
::INFO
,
1315 { %$($k).+, $($field)*}
1318 (?$
($k
:ident
).+) => (
1320 target
: module_path
!(),
1321 $
crate::Level
::INFO
,
1325 (%$
($k
:ident
).+) => (
1327 target
: module_path
!(),
1328 $
crate::Level
::INFO
,
1332 ($
($k
:ident
).+) => (
1334 target
: module_path
!(),
1335 $
crate::Level
::INFO
,
1341 target
: module_path
!(),
1342 $
crate::Level
::INFO
,
1349 /// Constructs an event at the warn level.
1351 /// This functions similarly to the [`event!`] macro. See [the top-level
1352 /// documentation][lib] for details on the syntax accepted by
1355 /// [`event!`]: macro.event.html
1356 /// [lib]: index.html#using-the-macros
1361 /// use tracing::warn;
1364 /// let warn_description = "Invalid Input";
1365 /// let input = &[0x27, 0x45];
1367 /// warn!(?input, warning = warn_description);
1369 /// target: "input_events",
1370 /// warning = warn_description,
1371 /// "Received warning for input: {:?}", input,
1377 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1378 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($field)* }
, $
($arg
)*)
1380 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1381 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1383 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1384 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1386 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1387 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1389 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1390 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, {}
, $
($arg
)+)
1392 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1394 target
: module_path
!(),
1396 $
crate::Level
::WARN
,
1401 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1403 target
: module_path
!(),
1405 $
crate::Level
::WARN
,
1406 { $($k).+ = $($field)*}
1409 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1411 target
: module_path
!(),
1413 $
crate::Level
::WARN
,
1414 { ?$($k).+ = $($field)*}
1417 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1419 target
: module_path
!(),
1421 $
crate::Level
::WARN
,
1422 { %$($k).+ = $($field)*}
1425 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1427 target
: module_path
!(),
1429 $
crate::Level
::WARN
,
1430 { $($k).+, $($field)*}
1433 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1435 target
: module_path
!(),
1437 $
crate::Level
::WARN
,
1438 { ?$($k).+, $($field)*}
1441 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1443 target
: module_path
!(),
1445 $
crate::Level
::WARN
,
1446 { %$($k).+, $($field)*}
1449 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1451 target
: module_path
!(),
1453 $
crate::Level
::WARN
,
1458 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1459 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { $($field)* }
, $
($arg
)*)
1461 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1462 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1464 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1465 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1467 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1468 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1470 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1471 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, {}
, $
($arg
)+)
1473 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1475 target
: module_path
!(),
1476 $
crate::Level
::WARN
,
1481 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1483 target
: module_path
!(),
1484 $
crate::Level
::WARN
,
1485 { $($k).+ = $($field)*}
1488 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1490 target
: module_path
!(),
1491 $
crate::Level
::WARN
,
1492 { ?$($k).+ = $($field)*}
1495 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1497 target
: module_path
!(),
1498 $
crate::Level
::TRACE
,
1499 { %$($k).+ = $($field)*}
1502 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1504 target
: module_path
!(),
1505 $
crate::Level
::WARN
,
1506 { $($k).+, $($field)*}
1509 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1511 target
: module_path
!(),
1512 $
crate::Level
::WARN
,
1513 { ?$($k).+, $($field)*}
1516 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1518 target
: module_path
!(),
1519 $
crate::Level
::WARN
,
1520 { %$($k).+, $($field)*}
1523 (?$
($k
:ident
).+) => (
1525 target
: module_path
!(),
1526 $
crate::Level
::WARN
,
1530 (%$
($k
:ident
).+) => (
1532 target
: module_path
!(),
1533 $
crate::Level
::WARN
,
1537 ($
($k
:ident
).+) => (
1539 target
: module_path
!(),
1540 $
crate::Level
::WARN
,
1546 target
: module_path
!(),
1547 $
crate::Level
::WARN
,
1554 /// Constructs an event at the error level.
1556 /// This functions similarly to the [`event!`] macro. See [the top-level
1557 /// documentation][lib] for details on the syntax accepted by
1560 /// [`event!`]: macro.event.html
1561 /// [lib]: index.html#using-the-macros
1566 /// use tracing::error;
1569 /// let (err_info, port) = ("No connection", 22);
1571 /// error!(port, error = %err_info);
1572 /// error!(target: "app_events", "App Error: {}", err_info);
1573 /// error!({ info = err_info }, "error on port: {}", port);
1577 macro_rules
! error
{
1578 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1579 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($field)* }
, $
($arg
)*)
1581 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1582 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1584 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1585 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1587 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1588 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1590 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1591 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, {}
, $
($arg
)+)
1593 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1595 target
: module_path
!(),
1597 $
crate::Level
::ERROR
,
1602 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1604 target
: module_path
!(),
1606 $
crate::Level
::ERROR
,
1607 { $($k).+ = $($field)*}
1610 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1612 target
: module_path
!(),
1614 $
crate::Level
::ERROR
,
1615 { ?$($k).+ = $($field)*}
1618 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1620 target
: module_path
!(),
1622 $
crate::Level
::ERROR
,
1623 { %$($k).+ = $($field)*}
1626 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1628 target
: module_path
!(),
1630 $
crate::Level
::ERROR
,
1631 { $($k).+, $($field)*}
1634 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1636 target
: module_path
!(),
1638 $
crate::Level
::ERROR
,
1639 { ?$($k).+, $($field)*}
1642 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1644 target
: module_path
!(),
1646 $
crate::Level
::ERROR
,
1647 { %$($k).+, $($field)*}
1650 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1652 target
: module_path
!(),
1654 $
crate::Level
::ERROR
,
1659 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1660 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { $($field)* }
, $
($arg
)*)
1662 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1663 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1665 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1666 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1668 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1669 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1671 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1672 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, {}
, $
($arg
)+)
1674 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1676 target
: module_path
!(),
1677 $
crate::Level
::ERROR
,
1682 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1684 target
: module_path
!(),
1685 $
crate::Level
::ERROR
,
1686 { $($k).+ = $($field)*}
1689 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1691 target
: module_path
!(),
1692 $
crate::Level
::ERROR
,
1693 { ?$($k).+ = $($field)*}
1696 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1698 target
: module_path
!(),
1699 $
crate::Level
::TRACE
,
1700 { %$($k).+ = $($field)*}
1703 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1705 target
: module_path
!(),
1706 $
crate::Level
::ERROR
,
1707 { $($k).+, $($field)*}
1710 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1712 target
: module_path
!(),
1713 $
crate::Level
::ERROR
,
1714 { ?$($k).+, $($field)*}
1717 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1719 target
: module_path
!(),
1720 $
crate::Level
::ERROR
,
1721 { %$($k).+, $($field)*}
1724 (?$
($k
:ident
).+) => (
1726 target
: module_path
!(),
1727 $
crate::Level
::ERROR
,
1731 (%$
($k
:ident
).+) => (
1733 target
: module_path
!(),
1734 $
crate::Level
::ERROR
,
1738 ($
($k
:ident
).+) => (
1740 target
: module_path
!(),
1741 $
crate::Level
::ERROR
,
1747 target
: module_path
!(),
1748 $
crate::Level
::ERROR
,
1755 /// Constructs a new static callsite for a span or event.
1758 macro_rules
! callsite
{
1759 (name
: $name
:expr
, kind
: $kind
:expr
, fields
: $
($fields
:tt
)*) => {{
1763 target
: module_path
!(),
1764 level
: $
crate::Level
::TRACE
,
1772 fields
: $
($fields
:tt
)*
1777 target
: module_path
!(),
1785 target
: $target
:expr
,
1787 fields
: $
($fields
:tt
)*
1789 use $
crate::__macro_support
::MacroCallsite
;
1790 static META
: $
crate::Metadata
<'
static> = {
1795 fields
: $
crate::fieldset
!( $
($fields
)* ),
1796 callsite
: &CALLSITE
,
1800 static CALLSITE
: MacroCallsite
= MacroCallsite
::new(&META
);
1801 CALLSITE
.register();
1807 // TODO: determine if this ought to be public API?`
1809 macro_rules
! level_enabled
{
1811 $lvl
<= $
crate::level_filters
::STATIC_MAX_LEVEL
1812 && $lvl
<= $
crate::level_filters
::LevelFilter
::current()
1818 macro_rules
! valueset
{
1820 // === base case ===
1821 (@ { $(,)* $($val:expr),* $(,)* }
, $next
:expr $
(,)*) => {
1825 // === recursive case (more tts) ===
1827 // TODO(#1138): determine a new syntax for uninitialized span fields, and
1829 // (@{ $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = _, $($rest:tt)*) => {
1830 // $crate::valueset!(@ { $($out),*, (&$next, None) }, $next, $($rest)*)
1832 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)*) => {
1834 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
1839 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = %$val
:expr
, $
($rest
:tt
)*) => {
1841 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
1846 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)*) => {
1848 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
1853 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+, $
($rest
:tt
)*) => {
1855 @ { $($out),*, (&$next, Some(&$($k).+ as &Value)) }
,
1860 (@ { $(,)* $($out:expr),* }
, $next
:expr
, ?$
($k
:ident
).+, $
($rest
:tt
)*) => {
1862 @ { $($out),*, (&$next, Some(&debug(&$($k).+) as &Value)) }
,
1867 (@ { $(,)* $($out:expr),* }
, $next
:expr
, %$
($k
:ident
).+, $
($rest
:tt
)*) => {
1869 @ { $($out),*, (&$next, Some(&display(&$($k).+) as &Value)) }
,
1874 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = ?$val
:expr
) => {
1876 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
1880 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = %$val
:expr
) => {
1882 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
1886 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = $val
:expr
) => {
1888 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
1892 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+) => {
1894 @ { $($out),*, (&$next, Some(&$($k).+ as &Value)) }
,
1898 (@ { $(,)* $($out:expr),* }
, $next
:expr
, ?$
($k
:ident
).+) => {
1900 @ { $($out),*, (&$next, Some(&debug(&$($k).+) as &Value)) }
,
1904 (@ { $(,)* $($out:expr),* }
, $next
:expr
, %$
($k
:ident
).+) => {
1906 @ { $($out),*, (&$next, Some(&display(&$($k).+) as &Value)) }
,
1911 // Handle literal names
1912 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= ?$val
:expr
, $
($rest
:tt
)*) => {
1914 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
1919 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= %$val
:expr
, $
($rest
:tt
)*) => {
1921 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
1926 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= $val
:expr
, $
($rest
:tt
)*) => {
1928 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
1933 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= ?$val
:expr
) => {
1935 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
1939 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= %$val
:expr
) => {
1941 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
1945 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= $val
:expr
) => {
1947 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
1952 // Remainder is unparseable, but exists --- must be format args!
1953 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($rest
:tt
)+) => {
1954 $
crate::valueset
!(@ { (&$next, Some(&format_args!($($rest)+) as &Value)), $($out),* }
, $next
, )
1958 ($fields
:expr
, $
($kvs
:tt
)+) => {
1960 #[allow(unused_imports)]
1961 use $
crate::field
::{debug, display, Value}
;
1962 let mut iter
= $fields
.iter();
1963 $fields
.value_set($
crate::valueset
!(
1965 iter
.next().expect("FieldSet corrupted (this is a bug)"),
1970 ($fields
:expr
,) => {
1972 $fields
.value_set(&[])
1979 macro_rules
! fieldset
{
1981 (@ { $(,)* $($out:expr),* $(,)* } $
(,)*) => {
1985 // == recursive cases (more tts) ==
1986 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)*) => {
1987 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
1989 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+ = %$val
:expr
, $
($rest
:tt
)*) => {
1990 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
1992 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)*) => {
1993 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
1995 // TODO(#1138): determine a new syntax for uninitialized span fields, and
1997 // (@ { $($out:expr),* } $($k:ident).+ = _, $($rest:tt)*) => {
1998 // $crate::fieldset!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $($rest)*)
2000 (@ { $(,)* $($out:expr),* } ?$
($k
:ident
).+, $
($rest
:tt
)*) => {
2001 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2003 (@ { $(,)* $($out:expr),* }
%$
($k
:ident
).+, $
($rest
:tt
)*) => {
2004 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2006 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+, $
($rest
:tt
)*) => {
2007 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2010 // Handle literal names
2011 (@ { $(,)* $($out:expr),* } $k
:literal
= ?$val
:expr
, $
($rest
:tt
)*) => {
2012 $
crate::fieldset
!(@ { $($out),*, $k } $
($rest
)*)
2014 (@ { $(,)* $($out:expr),* } $k
:literal
= %$val
:expr
, $
($rest
:tt
)*) => {
2015 $
crate::fieldset
!(@ { $($out),*, $k } $
($rest
)*)
2017 (@ { $(,)* $($out:expr),* } $k
:literal
= $val
:expr
, $
($rest
:tt
)*) => {
2018 $
crate::fieldset
!(@ { $($out),*, $k } $
($rest
)*)
2021 // Remainder is unparseable, but exists --- must be format args!
2022 (@ { $(,)* $($out:expr),* } $
($rest
:tt
)+) => {
2023 $
crate::fieldset
!(@ { "message", $($out),*, }
)
2028 $
crate::fieldset
!(@ { } $
($args
)*,)
2033 #[cfg(feature = "log")]
2036 macro_rules
! level_to_log
{
2039 $
crate::Level
::ERROR
=> $
crate::log
::Level
::Error
,
2040 $
crate::Level
::WARN
=> $
crate::log
::Level
::Warn
,
2041 $
crate::Level
::INFO
=> $
crate::log
::Level
::Info
,
2042 $
crate::Level
::DEBUG
=> $
crate::log
::Level
::Debug
,
2043 _
=> $
crate::log
::Level
::Trace
,
2050 macro_rules
! __tracing_stringify
{
2056 #[cfg(not(feature = "log"))]
2059 macro_rules
! __tracing_log
{
2060 (target
: $target
:expr
, $level
:expr
, $
($field
:tt
)+ ) => {}
;
2063 #[cfg(not(feature = "log"))]
2066 macro_rules
! __tracing_mk_span
{
2067 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
2069 if $
crate::level_enabled
!($lvl
) {
2070 use $
crate::__macro_support
::*;
2071 let callsite
= $
crate::callsite
! {
2073 kind
: $
crate::metadata
::Kind
::SPAN
,
2078 if callsite
.is_enabled() {
2079 let meta
= callsite
.metadata();
2080 $
crate::Span
::child_of(
2083 &$
crate::valueset
!(meta
.fields(), $
($fields
)*),
2086 $
crate::Span
::none()
2089 $
crate::Span
::none()
2093 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
2095 if $
crate::level_enabled
!($lvl
) {
2096 use $
crate::__macro_support
::*;
2097 let callsite
= $
crate::callsite
! {
2099 kind
: $
crate::metadata
::Kind
::SPAN
,
2104 if callsite
.is_enabled() {
2105 let meta
= callsite
.metadata();
2108 &$
crate::valueset
!(meta
.fields(), $
($fields
)*),
2111 $
crate::Span
::none()
2114 $
crate::Span
::none()
2120 #[cfg(feature = "log")]
2123 macro_rules
! __tracing_mk_span
{
2124 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
2126 use $
crate::callsite
::Callsite
;
2127 let callsite
= $
crate::callsite
! {
2129 kind
: $
crate::metadata
::Kind
::SPAN
,
2134 let meta
= callsite
.metadata();
2135 if $
crate::level_enabled
!($lvl
) && callsite
.is_enabled() {
2136 $
crate::Span
::child_of(
2139 &$
crate::valueset
!(meta
.fields(), $
($fields
)*),
2142 $
crate::if_log_enabled
! {{
2143 let span
= $
crate::Span
::new_disabled(meta
);
2144 span
.record_all(&$
crate::valueset
!(meta
.fields(), $
($fields
)*));
2147 $
crate::Span
::none()
2152 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
2154 use $
crate::callsite
::Callsite
;
2155 let callsite
= $
crate::callsite
! {
2157 kind
: $
crate::metadata
::Kind
::SPAN
,
2162 let meta
= callsite
.metadata();
2163 if $
crate::level_enabled
!($lvl
) && callsite
.is_enabled() {
2166 &$
crate::valueset
!(meta
.fields(), $
($fields
)*),
2169 $
crate::if_log_enabled
! {{
2170 let span
= $
crate::Span
::new_disabled(meta
);
2171 span
.record_all(&$
crate::valueset
!(meta
.fields(), $
($fields
)*));
2174 $
crate::Span
::none()
2181 #[cfg(feature = "log")]
2184 macro_rules
! __mk_format_string
{
2185 // === base case ===
2186 (@ { $(,)* $($out:expr),* $(,)* } $
(,)*) => {
2190 // === recursive case (more tts), ===
2191 // ====== shorthand field syntax ===
2192 (@ { $(,)* $($out:expr),* }
, ?$
($k
:ident
).+, $
($rest
:tt
)*) => {
2193 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2195 (@ { $(,)* $($out:expr),* }, %$($k:ident).+, $($rest:tt)*) => {
2196 $crate::__mk_format_string!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={} " }, $
($rest
)*)
2198 (@ { $(,)* $($out:expr),* }
, $
($k
:ident
).+, $
($rest
:tt
)*) => {
2199 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2201 // ====== kv field syntax ===
2202 (@ { $(,)* $($out:expr),* }, message = $val:expr, $($rest:tt)*) => {
2203 $crate::__mk_format_string!(@ { $($out),*, "{} " }, $
($rest
)*)
2205 (@ { $(,)* $($out:expr),* }
, $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)*) => {
2206 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2208 (@ { $(,)* $($out:expr),* }, $($k:ident).+ = %$val:expr, $($rest:tt)*) => {
2209 $crate::__mk_format_string!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={} " }, $
($rest
)*)
2211 (@ { $(,)* $($out:expr),* }
, $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)*) => {
2212 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2215 // === rest is unparseable --- must be fmt args ===
2216 (@ { $(,)* $($out:expr),* }, $($rest:tt)+) => {
2217 $crate::__mk_format_string!(@ { "{} ", $
($out
),* }, )
2222 $
crate::__mk_format_string
!(@ { }
, $
($kvs
)+,)
2229 #[cfg(feature = "log")]
2232 macro_rules
! __mk_format_args
{
2233 // === finished --- called into by base cases ===
2234 (@ { $(,)* $($out:expr),* $(,)* }
, $fmt
:expr
, fields
: $
(,)*) => {
2235 format_args
!($fmt
, $
($out
),*)
2238 // === base case (no more tts) ===
2239 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = ?$val
:expr $
(,)*) => {
2240 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: )
2242 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = %$val
:expr $
(,)*) => {
2243 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: )
2245 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = $val
:expr $
(,)*) => {
2246 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: )
2248 // ====== shorthand field syntax ===
2249 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: ?$
($k
:ident
).+ $
(,)*) => {
2250 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
:)
2252 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: %$
($k
:ident
).+ $
(,)*) => {
2253 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: )
2255 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ $
(,)*) => {
2256 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: )
2259 // === recursive case (more tts) ===
2260 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)+) => {
2261 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: $
($rest
)+)
2263 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = %$val
:expr
, $
($rest
:tt
)+) => {
2264 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: $
($rest
)+)
2266 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)+) => {
2267 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: $
($rest
)+)
2269 // ====== shorthand field syntax ===
2270 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: ?$
($k
:ident
).+, $
($rest
:tt
)+) => {
2271 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: $
($rest
)+)
2273 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: %$
($k
:ident
).+, $
($rest
:tt
)+) => {
2274 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: $
($rest
)+)
2276 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+, $
($rest
:tt
)+) => {
2277 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: $
($rest
)+)
2280 // === rest is unparseable --- must be fmt args ===
2281 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($rest
:tt
)+) => {
2282 $
crate::__mk_format_args
!(@ { format_args!($($rest)+), $($out),* }
, $fmt
, fields
: )
2288 #[allow(unused_imports)]
2289 use $
crate::field
::{debug, display}
;
2290 // use $crate::__mk_format_string;
2291 $
crate::__mk_format_args
!(@ { }
, $
crate::__mk_format_string
!($
($kv
)*), fields
: $
($kv
)*)
2296 #[cfg(feature = "log")]
2299 macro_rules
! __tracing_log
{
2300 (target
: $target
:expr
, $level
:expr
, $
($field
:tt
)+ ) => {
2301 $
crate::if_log_enabled
! {{
2303 let level
= $
crate::level_to_log
!(&$level
);
2304 if level
<= log
::STATIC_MAX_LEVEL
&& level
<= log
::max_level() {
2305 let log_meta
= log
::Metadata
::builder()
2309 let logger
= log
::logger();
2310 if logger
.enabled(&log_meta
) {
2311 logger
.log(&log
::Record
::builder()
2312 .file(Some(file
!()))
2313 .module_path(Some(module_path
!()))
2314 .line(Some(line
!()))
2316 .args($
crate::__mk_format_args
!($
($field
)+))
2324 #[cfg(not(feature = "log"))]
2327 macro_rules
! if_log_enabled
{
2329 $
crate::if_log_enabled
! { $e }
2331 ($if_log
:block
) => {
2332 $
crate::if_log_enabled
! { $if_log else {}
}
2334 ($if_log
:block
else $else_block
:block
) => {
2339 #[cfg(all(feature = "log", not(feature = "log-always")))]
2342 macro_rules
! if_log_enabled
{
2344 $
crate::if_log_enabled
! { $e }
2346 ($if_log
:block
) => {
2347 $
crate::if_log_enabled
! { $if_log else {}
}
2349 ($if_log
:block
else $else_block
:block
) => {
2350 if !$
crate::dispatcher
::has_been_set() {
2358 #[cfg(all(feature = "log", feature = "log-always"))]
2361 macro_rules
! if_log_enabled
{
2363 $
crate::if_log_enabled
! { $e }
2365 ($if_log
:block
) => {
2366 $
crate::if_log_enabled
! { $if_log else {}
}
2368 ($if_log
:block
else $else_block
:block
) => {
2369 #[allow(unused_braces)]