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
)*) => {
26 use $
crate::__macro_support
::Callsite
as _
;
27 static CALLSITE
: $
crate::__macro_support
::MacroCallsite
= $
crate::callsite2
! {
29 kind
: $
crate::metadata
::Kind
::SPAN
,
34 let mut interest
= $
crate::subscriber
::Interest
::never();
35 if $
crate::level_enabled
!($lvl
)
36 && { interest = CALLSITE.interest(); !interest.is_never() }
37 && CALLSITE
.is_enabled(interest
)
39 let meta
= CALLSITE
.metadata();
40 // span with explicit parent
41 $
crate::Span
::child_of(
44 &$
crate::valueset
!(meta
.fields(), $
($fields
)*),
47 let span
= CALLSITE
.disabled_span();
48 $
crate::if_log_enabled
! { $lvl
, {
49 span
.record_all(&$
crate::valueset
!(CALLSITE
.metadata().fields(), $
($fields
)*));
55 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
57 use $
crate::__macro_support
::Callsite
as _
;
58 static CALLSITE
: $
crate::__macro_support
::MacroCallsite
= $
crate::callsite2
! {
60 kind
: $
crate::metadata
::Kind
::SPAN
,
65 let mut interest
= $
crate::subscriber
::Interest
::never();
66 if $
crate::level_enabled
!($lvl
)
67 && { interest = CALLSITE.interest(); !interest.is_never() }
68 && CALLSITE
.is_enabled(interest
)
70 let meta
= CALLSITE
.metadata();
71 // span with contextual parent
74 &$
crate::valueset
!(meta
.fields(), $
($fields
)*),
77 let span
= CALLSITE
.disabled_span();
78 $
crate::if_log_enabled
! { $lvl
, {
79 span
.record_all(&$
crate::valueset
!(CALLSITE
.metadata().fields(), $
($fields
)*));
85 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
) => {
86 $
crate::span
!(target
: $target
, parent
: $parent
, $lvl
, $name
,)
88 (parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
90 target
: module_path
!(),
97 (parent
: $parent
:expr
, $lvl
:expr
, $name
:expr
) => {
99 target
: module_path
!(),
105 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
113 (target
: $target
:expr
, $lvl
:expr
, $name
:expr
) => {
114 $
crate::span
!(target
: $target
, $lvl
, $name
,)
116 ($lvl
:expr
, $name
:expr
, $
($fields
:tt
)*) => {
118 target
: module_path
!(),
124 ($lvl
:expr
, $name
:expr
) => {
126 target
: module_path
!(),
133 /// Constructs a span at the trace level.
135 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
138 /// See [the top-level documentation][lib] for details on the syntax accepted by
141 /// [lib]: index.html#using-the-macros
142 /// [attributes]: index.html#configuring-attributes
143 /// [Fields]: index.html#recording-fields
144 /// [`span!`]: macro.span.html
149 /// # use tracing::{trace_span, span, Level};
151 /// trace_span!("my_span");
152 /// // is equivalent to:
153 /// span!(Level::TRACE, "my_span");
158 /// # use tracing::{trace_span, span, Level};
160 /// let span = trace_span!("my span");
161 /// span.in_scope(|| {
162 /// // do work inside the span...
167 macro_rules
! trace_span
{
168 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
172 $
crate::Level
::TRACE
,
177 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
178 $
crate::trace_span
!(target
: $target
, parent
: $parent
, $name
,)
180 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
182 target
: module_path
!(),
184 $
crate::Level
::TRACE
,
189 (parent
: $parent
:expr
, $name
:expr
) => {
190 $
crate::trace_span
!(parent
: $parent
, $name
,)
192 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
195 $
crate::Level
::TRACE
,
200 (target
: $target
:expr
, $name
:expr
) => {
201 $
crate::trace_span
!(target
: $target
, $name
,)
203 ($name
:expr
, $
($field
:tt
)*) => {
205 target
: module_path
!(),
206 $
crate::Level
::TRACE
,
211 ($name
:expr
) => { $crate::trace_span!($name,) }
;
214 /// Constructs a span at the debug level.
216 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
219 /// See [the top-level documentation][lib] for details on the syntax accepted by
222 /// [lib]: index.html#using-the-macros
223 /// [attributes]: index.html#configuring-attributes
224 /// [Fields]: index.html#recording-fields
225 /// [`span!`]: macro.span.html
230 /// # use tracing::{debug_span, span, Level};
232 /// debug_span!("my_span");
233 /// // is equivalent to:
234 /// span!(Level::DEBUG, "my_span");
239 /// # use tracing::debug_span;
241 /// let span = debug_span!("my span");
242 /// span.in_scope(|| {
243 /// // do work inside the span...
248 macro_rules
! debug_span
{
249 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
253 $
crate::Level
::DEBUG
,
258 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
259 $
crate::debug_span
!(target
: $target
, parent
: $parent
, $name
,)
261 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
263 target
: module_path
!(),
265 $
crate::Level
::DEBUG
,
270 (parent
: $parent
:expr
, $name
:expr
) => {
271 $
crate::debug_span
!(parent
: $parent
, $name
,)
273 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
276 $
crate::Level
::DEBUG
,
281 (target
: $target
:expr
, $name
:expr
) => {
282 $
crate::debug_span
!(target
: $target
, $name
,)
284 ($name
:expr
, $
($field
:tt
)*) => {
286 target
: module_path
!(),
287 $
crate::Level
::DEBUG
,
292 ($name
:expr
) => {$crate::debug_span!($name,)}
;
295 /// Constructs a span at the info level.
297 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
300 /// See [the top-level documentation][lib] for details on the syntax accepted by
303 /// [lib]: index.html#using-the-macros
304 /// [attributes]: index.html#configuring-attributes
305 /// [Fields]: index.html#recording-fields
306 /// [`span!`]: macro.span.html
311 /// # use tracing::{span, info_span, Level};
313 /// info_span!("my_span");
314 /// // is equivalent to:
315 /// span!(Level::INFO, "my_span");
320 /// # use tracing::info_span;
322 /// let span = info_span!("my span");
323 /// span.in_scope(|| {
324 /// // do work inside the span...
329 macro_rules
! info_span
{
330 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
339 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
340 $
crate::info_span
!(target
: $target
, parent
: $parent
, $name
,)
342 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
344 target
: module_path
!(),
351 (parent
: $parent
:expr
, $name
:expr
) => {
352 $
crate::info_span
!(parent
: $parent
, $name
,)
354 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
362 (target
: $target
:expr
, $name
:expr
) => {
363 $
crate::info_span
!(target
: $target
, $name
,)
365 ($name
:expr
, $
($field
:tt
)*) => {
367 target
: module_path
!(),
373 ($name
:expr
) => {$crate::info_span!($name,)}
;
376 /// Constructs a span at the warn level.
378 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
381 /// See [the top-level documentation][lib] for details on the syntax accepted by
384 /// [lib]: index.html#using-the-macros
385 /// [attributes]: index.html#configuring-attributes
386 /// [Fields]: index.html#recording-fields
387 /// [`span!`]: macro.span.html
392 /// # use tracing::{warn_span, span, Level};
394 /// warn_span!("my_span");
395 /// // is equivalent to:
396 /// span!(Level::WARN, "my_span");
401 /// use tracing::warn_span;
403 /// let span = warn_span!("my span");
404 /// span.in_scope(|| {
405 /// // do work inside the span...
410 macro_rules
! warn_span
{
411 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
420 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
421 $
crate::warn_span
!(target
: $target
, parent
: $parent
, $name
,)
423 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
425 target
: module_path
!(),
432 (parent
: $parent
:expr
, $name
:expr
) => {
433 $
crate::warn_span
!(parent
: $parent
, $name
,)
435 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
443 (target
: $target
:expr
, $name
:expr
) => {
444 $
crate::warn_span
!(target
: $target
, $name
,)
446 ($name
:expr
, $
($field
:tt
)*) => {
448 target
: module_path
!(),
454 ($name
:expr
) => {$crate::warn_span!($name,)}
;
456 /// Constructs a span at the error level.
458 /// [Fields] and [attributes] are set using the same syntax as the [`span!`]
461 /// See [the top-level documentation][lib] for details on the syntax accepted by
464 /// [lib]: index.html#using-the-macros
465 /// [attributes]: index.html#configuring-attributes
466 /// [Fields]: index.html#recording-fields
467 /// [`span!`]: macro.span.html
472 /// # use tracing::{span, error_span, Level};
474 /// error_span!("my_span");
475 /// // is equivalent to:
476 /// span!(Level::ERROR, "my_span");
481 /// # use tracing::error_span;
483 /// let span = error_span!("my span");
484 /// span.in_scope(|| {
485 /// // do work inside the span...
490 macro_rules
! error_span
{
491 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
495 $
crate::Level
::ERROR
,
500 (target
: $target
:expr
, parent
: $parent
:expr
, $name
:expr
) => {
501 $
crate::error_span
!(target
: $target
, parent
: $parent
, $name
,)
503 (parent
: $parent
:expr
, $name
:expr
, $
($field
:tt
)*) => {
505 target
: module_path
!(),
507 $
crate::Level
::ERROR
,
512 (parent
: $parent
:expr
, $name
:expr
) => {
513 $
crate::error_span
!(parent
: $parent
, $name
,)
515 (target
: $target
:expr
, $name
:expr
, $
($field
:tt
)*) => {
518 $
crate::Level
::ERROR
,
523 (target
: $target
:expr
, $name
:expr
) => {
524 $
crate::error_span
!(target
: $target
, $name
,)
526 ($name
:expr
, $
($field
:tt
)*) => {
528 target
: module_path
!(),
529 $
crate::Level
::ERROR
,
534 ($name
:expr
) => {$crate::error_span!($name,)}
;
537 /// Constructs a new `Event`.
539 /// The event macro is invoked with a `Level` and up to 32 key-value fields.
540 /// Optionally, a format string and arguments may follow the fields; this will
541 /// be used to construct an implicit field named "message".
543 /// See [the top-level documentation][lib] for details on the syntax accepted by
546 /// [lib]: index.html#using-the-macros
551 /// use tracing::{event, Level};
554 /// let data = (42, "forty-two");
555 /// let private_data = "private";
556 /// let error = "a bad error";
558 /// event!(Level::ERROR, %error, "Received error");
560 /// target: "app_events",
564 /// "App warning: {}",
567 /// event!(Level::INFO, the_answer = data.0);
571 // /// Note that *unlike `span!`*, `event!` requires a value for all fields. As
572 // /// events are recorded immediately when the macro is invoked, there is no
573 // /// opportunity for fields to be recorded later. A trailing comma on the final
574 // /// field is valid.
576 // /// For example, the following does not compile:
577 // /// ```rust,compile_fail
578 // /// # #[macro_use]
579 // /// # extern crate tracing;
580 // /// # use tracing::Level;
582 // /// event!(Level::INFO, foo = 5, bad_field, bar = "hello")
587 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
)=> (
588 $
crate::__tracing_log
!(
594 if $
crate::level_enabled
!($lvl
) {
595 use $
crate::__macro_support
::*;
596 static CALLSITE
: $
crate::__macro_support
::MacroCallsite
= $
crate::callsite2
! {
603 kind
: $
crate::metadata
::Kind
::EVENT
,
608 let interest
= CALLSITE
.interest();
609 if !interest
.is_never() && CALLSITE
.is_enabled(interest
) {
610 let meta
= CALLSITE
.metadata();
611 // event with explicit parent
612 $
crate::Event
::child_of(
615 &$
crate::valueset
!(meta
.fields(), $
($fields
)*)
621 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
626 { message = format_args!($($arg)+), $($fields)* }
629 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $
($k
:ident
).+ = $
($fields
:tt
)* ) => (
630 $
crate::event
!(target
: $target
, parent
: $parent
, $lvl
, { $($k).+ = $($fields)* }
)
632 (target
: $target
:expr
, parent
: $parent
:expr
, $lvl
:expr
, $
($arg
:tt
)+) => (
633 $
crate::event
!(target
: $target
, parent
: $parent
, $lvl
, { $($arg)+ }
)
635 (target
: $target
:expr
, $lvl
:expr
, { $($fields:tt)* }
)=> ({
636 $
crate::__tracing_log
!(
641 if $
crate::level_enabled
!($lvl
) {
642 use $
crate::__macro_support
::*;
643 static CALLSITE
: $
crate::__macro_support
::MacroCallsite
= $
crate::callsite2
! {
650 kind
: $
crate::metadata
::Kind
::EVENT
,
655 let interest
= CALLSITE
.interest();
656 if !interest
.is_never() && CALLSITE
.is_enabled(interest
) {
657 let meta
= CALLSITE
.metadata();
658 // event with contextual parent
659 $
crate::Event
::dispatch(
661 &$
crate::valueset
!(meta
.fields(), $
($fields
)*)
666 (target
: $target
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
670 { message = format_args!($($arg)+), $($fields)* }
673 (target
: $target
:expr
, $lvl
:expr
, $
($k
:ident
).+ = $
($fields
:tt
)* ) => (
674 $
crate::event
!(target
: $target
, $lvl
, { $($k).+ = $($fields)* }
)
676 (target
: $target
:expr
, $lvl
:expr
, $
($arg
:tt
)+ ) => (
677 $
crate::event
!(target
: $target
, $lvl
, { $($arg)+ }
)
679 (parent
: $parent
:expr
, $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
681 target
: module_path
!(),
684 { message = format_args!($($arg)+), $($fields)* }
687 (parent
: $parent
:expr
, $lvl
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
689 target
: module_path
!(),
692 { $($k).+ = $($field)*}
695 (parent
: $parent
:expr
, $lvl
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
697 target
: module_path
!(),
700 { ?$($k).+ = $($field)*}
703 (parent
: $parent
:expr
, $lvl
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
705 target
: module_path
!(),
708 { %$($k).+ = $($field)*}
711 (parent
: $parent
:expr
, $lvl
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
713 target
: module_path
!(),
716 { $($k).+, $($field)*}
719 (parent
: $parent
:expr
, $lvl
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
721 target
: module_path
!(),
724 { %$($k).+, $($field)*}
727 (parent
: $parent
:expr
, $lvl
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
729 target
: module_path
!(),
732 { ?$($k).+, $($field)*}
735 (parent
: $parent
:expr
, $lvl
:expr
, $
($arg
:tt
)+ ) => (
736 $
crate::event
!(target
: module_path
!(), parent
: $parent
, $lvl
, { $($arg)+ }
)
738 ( $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
740 target
: module_path
!(),
742 { message = format_args!($($arg)+), $($fields)* }
745 ( $lvl
:expr
, { $($fields:tt)* }
, $
($arg
:tt
)+ ) => (
747 target
: module_path
!(),
749 { message = format_args!($($arg)+), $($fields)* }
752 ($lvl
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
754 target
: module_path
!(),
756 { $($k).+ = $($field)*}
759 ($lvl
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
761 target
: module_path
!(),
763 { $($k).+, $($field)*}
766 ($lvl
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
768 target
: module_path
!(),
770 { ?$($k).+, $($field)*}
773 ($lvl
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
775 target
: module_path
!(),
777 { %$($k).+, $($field)*}
780 ($lvl
:expr
, ?$
($k
:ident
).+) => (
781 $
crate::event
!($lvl
, ?$
($k
).+,)
783 ($lvl
:expr
, %$
($k
:ident
).+) => (
784 $
crate::event
!($lvl
, %$
($k
).+,)
786 ($lvl
:expr
, $
($k
:ident
).+) => (
787 $
crate::event
!($lvl
, $
($k
).+,)
789 ( $lvl
:expr
, $
($arg
:tt
)+ ) => (
790 $
crate::event
!(target
: module_path
!(), $lvl
, { $($arg)+ }
)
794 /// Constructs an event at the trace level.
796 /// This functions similarly to the [`event!`] macro. See [the top-level
797 /// documentation][lib] for details on the syntax accepted by
800 /// [`event!`]: macro.event.html
801 /// [lib]: index.html#using-the-macros
806 /// use tracing::trace;
807 /// # #[derive(Debug, Copy, Clone)] struct Position { x: f32, y: f32 }
808 /// # impl Position {
809 /// # const ORIGIN: Self = Self { x: 0.0, y: 0.0 };
810 /// # fn dist(&self, other: Position) -> f32 {
811 /// # let x = (other.x - self.x).exp2(); let y = (self.y - other.y).exp2();
816 /// let pos = Position { x: 3.234, y: -1.223 };
817 /// let origin_dist = pos.dist(Position::ORIGIN);
819 /// trace!(position = ?pos, ?origin_dist);
821 /// target: "app_events",
823 /// "x is {} and y is {}",
824 /// if pos.x >= 0.0 { "positive" } else { "negative" },
825 /// if pos.y >= 0.0 { "positive" } else { "negative" }
831 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
832 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($field)* }
, $
($arg
)*)
834 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
835 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
837 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
838 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
840 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
841 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, { $($k).+ $($field)+ }
)
843 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
844 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::TRACE
, {}
, $
($arg
)+)
846 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
848 target
: module_path
!(),
850 $
crate::Level
::TRACE
,
855 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
857 target
: module_path
!(),
859 $
crate::Level
::TRACE
,
860 { $($k).+ = $($field)*}
863 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
865 target
: module_path
!(),
867 $
crate::Level
::TRACE
,
868 { ?$($k).+ = $($field)*}
871 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
873 target
: module_path
!(),
875 $
crate::Level
::TRACE
,
876 { %$($k).+ = $($field)*}
879 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
881 target
: module_path
!(),
883 $
crate::Level
::TRACE
,
884 { $($k).+, $($field)*}
887 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
889 target
: module_path
!(),
891 $
crate::Level
::TRACE
,
892 { ?$($k).+, $($field)*}
895 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
897 target
: module_path
!(),
899 $
crate::Level
::TRACE
,
900 { %$($k).+, $($field)*}
903 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
905 target
: module_path
!(),
907 $
crate::Level
::TRACE
,
912 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
913 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { $($field)* }
, $
($arg
)*)
915 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)* ) => (
916 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { $($k).+ $($field)* }
)
918 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)* ) => (
919 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { ?$($k).+ $($field)* }
)
921 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)* ) => (
922 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, { %$($k).+ $($field)* }
)
924 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
925 $
crate::event
!(target
: $target
, $
crate::Level
::TRACE
, {}
, $
($arg
)+)
927 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
929 target
: module_path
!(),
930 $
crate::Level
::TRACE
,
935 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
937 target
: module_path
!(),
938 $
crate::Level
::TRACE
,
939 { $($k).+ = $($field)*}
942 ($
($k
:ident
).+, $
($field
:tt
)*) => (
944 target
: module_path
!(),
945 $
crate::Level
::TRACE
,
946 { $($k).+, $($field)*}
949 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
951 target
: module_path
!(),
952 $
crate::Level
::TRACE
,
953 { ?$($k).+, $($field)*}
956 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
958 target
: module_path
!(),
959 $
crate::Level
::TRACE
,
960 { %$($k).+, $($field)*}
963 (?$
($k
:ident
).+) => (
965 target
: module_path
!(),
966 $
crate::Level
::TRACE
,
970 (%$
($k
:ident
).+) => (
972 target
: module_path
!(),
973 $
crate::Level
::TRACE
,
979 target
: module_path
!(),
980 $
crate::Level
::TRACE
,
986 target
: module_path
!(),
987 $
crate::Level
::TRACE
,
994 /// Constructs an event at the debug level.
996 /// This functions similarly to the [`event!`] macro. See [the top-level
997 /// documentation][lib] for details on the syntax accepted by
1000 /// [`event!`]: macro.event.html
1001 /// [lib]: index.html#using-the-macros
1006 /// use tracing::debug;
1008 /// # #[derive(Debug)] struct Position { x: f32, y: f32 }
1010 /// let pos = Position { x: 3.234, y: -1.223 };
1012 /// debug!(?pos.x, ?pos.y);
1013 /// debug!(target: "app_events", position = ?pos, "New position");
1017 macro_rules
! debug
{
1018 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1019 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($field)* }
, $
($arg
)*)
1021 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1022 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
1024 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1025 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
1027 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1028 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, { $($k).+ $($field)+ }
)
1030 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1031 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::DEBUG
, {}
, $
($arg
)+)
1033 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1035 target
: module_path
!(),
1037 $
crate::Level
::DEBUG
,
1042 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1044 target
: module_path
!(),
1046 $
crate::Level
::DEBUG
,
1047 { $($k).+ = $($field)*}
1050 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1052 target
: module_path
!(),
1054 $
crate::Level
::DEBUG
,
1055 { ?$($k).+ = $($field)*}
1058 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1060 target
: module_path
!(),
1062 $
crate::Level
::DEBUG
,
1063 { %$($k).+ = $($field)*}
1066 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1068 target
: module_path
!(),
1070 $
crate::Level
::DEBUG
,
1071 { $($k).+, $($field)*}
1074 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1076 target
: module_path
!(),
1078 $
crate::Level
::DEBUG
,
1079 { ?$($k).+, $($field)*}
1082 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1084 target
: module_path
!(),
1086 $
crate::Level
::DEBUG
,
1087 { %$($k).+, $($field)*}
1090 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1092 target
: module_path
!(),
1094 $
crate::Level
::DEBUG
,
1099 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1100 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { $($field)* }
, $
($arg
)*)
1102 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)* ) => (
1103 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { $($k).+ $($field)* }
)
1105 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)* ) => (
1106 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { ?$($k).+ $($field)* }
)
1108 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)* ) => (
1109 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, { %$($k).+ $($field)* }
)
1111 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1112 $
crate::event
!(target
: $target
, $
crate::Level
::DEBUG
, {}
, $
($arg
)+)
1114 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1116 target
: module_path
!(),
1117 $
crate::Level
::DEBUG
,
1122 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1124 target
: module_path
!(),
1125 $
crate::Level
::DEBUG
,
1126 { $($k).+ = $($field)*}
1129 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1131 target
: module_path
!(),
1132 $
crate::Level
::DEBUG
,
1133 { ?$($k).+ = $($field)*}
1136 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1138 target
: module_path
!(),
1139 $
crate::Level
::DEBUG
,
1140 { %$($k).+ = $($field)*}
1143 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1145 target
: module_path
!(),
1146 $
crate::Level
::DEBUG
,
1147 { $($k).+, $($field)*}
1150 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1152 target
: module_path
!(),
1153 $
crate::Level
::DEBUG
,
1154 { ?$($k).+, $($field)*}
1157 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1159 target
: module_path
!(),
1160 $
crate::Level
::DEBUG
,
1161 { %$($k).+, $($field)*}
1164 (?$
($k
:ident
).+) => (
1166 target
: module_path
!(),
1167 $
crate::Level
::DEBUG
,
1171 (%$
($k
:ident
).+) => (
1173 target
: module_path
!(),
1174 $
crate::Level
::DEBUG
,
1178 ($
($k
:ident
).+) => (
1180 target
: module_path
!(),
1181 $
crate::Level
::DEBUG
,
1187 target
: module_path
!(),
1188 $
crate::Level
::DEBUG
,
1195 /// Constructs an event at the info level.
1197 /// This functions similarly to the [`event!`] macro. See [the top-level
1198 /// documentation][lib] for details on the syntax accepted by
1201 /// [`event!`]: macro.event.html
1202 /// [lib]: index.html#using-the-macros
1207 /// use tracing::info;
1208 /// # // this is so the test will still work in no-std mode
1209 /// # #[derive(Debug)]
1210 /// # pub struct Ipv4Addr;
1211 /// # impl Ipv4Addr { fn new(o1: u8, o2: u8, o3: u8, o4: u8) -> Self { Self } }
1213 /// # struct Connection { port: u32, speed: f32 }
1214 /// use tracing::field;
1216 /// let addr = Ipv4Addr::new(127, 0, 0, 1);
1217 /// let conn = Connection { port: 40, speed: 3.20 };
1219 /// info!(conn.port, "connected to {:?}", addr);
1221 /// target: "connection_events",
1230 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1231 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($field)* }
, $
($arg
)*)
1233 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1234 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1236 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1237 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1239 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1240 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, { $($k).+ $($field)+ }
)
1242 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1243 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::INFO
, {}
, $
($arg
)+)
1245 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1247 target
: module_path
!(),
1249 $
crate::Level
::INFO
,
1254 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1256 target
: module_path
!(),
1258 $
crate::Level
::INFO
,
1259 { $($k).+ = $($field)*}
1262 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1264 target
: module_path
!(),
1266 $
crate::Level
::INFO
,
1267 { ?$($k).+ = $($field)*}
1270 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1272 target
: module_path
!(),
1274 $
crate::Level
::INFO
,
1275 { %$($k).+ = $($field)*}
1278 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1280 target
: module_path
!(),
1282 $
crate::Level
::INFO
,
1283 { $($k).+, $($field)*}
1286 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1288 target
: module_path
!(),
1290 $
crate::Level
::INFO
,
1291 { ?$($k).+, $($field)*}
1294 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1296 target
: module_path
!(),
1298 $
crate::Level
::INFO
,
1299 { %$($k).+, $($field)*}
1302 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1304 target
: module_path
!(),
1306 $
crate::Level
::INFO
,
1311 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1312 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($field)* }
, $
($arg
)*)
1314 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)* ) => (
1315 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($k).+ $($field)* }
)
1317 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)* ) => (
1318 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { ?$($k).+ $($field)* }
)
1320 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)* ) => (
1321 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, { $($k).+ $($field)* }
)
1323 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1324 $
crate::event
!(target
: $target
, $
crate::Level
::INFO
, {}
, $
($arg
)+)
1326 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1328 target
: module_path
!(),
1329 $
crate::Level
::INFO
,
1334 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1336 target
: module_path
!(),
1337 $
crate::Level
::INFO
,
1338 { $($k).+ = $($field)*}
1341 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1343 target
: module_path
!(),
1344 $
crate::Level
::INFO
,
1345 { ?$($k).+ = $($field)*}
1348 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1350 target
: module_path
!(),
1351 $
crate::Level
::INFO
,
1352 { %$($k).+ = $($field)*}
1355 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1357 target
: module_path
!(),
1358 $
crate::Level
::INFO
,
1359 { $($k).+, $($field)*}
1362 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1364 target
: module_path
!(),
1365 $
crate::Level
::INFO
,
1366 { ?$($k).+, $($field)*}
1369 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1371 target
: module_path
!(),
1372 $
crate::Level
::INFO
,
1373 { %$($k).+, $($field)*}
1376 (?$
($k
:ident
).+) => (
1378 target
: module_path
!(),
1379 $
crate::Level
::INFO
,
1383 (%$
($k
:ident
).+) => (
1385 target
: module_path
!(),
1386 $
crate::Level
::INFO
,
1390 ($
($k
:ident
).+) => (
1392 target
: module_path
!(),
1393 $
crate::Level
::INFO
,
1399 target
: module_path
!(),
1400 $
crate::Level
::INFO
,
1407 /// Constructs an event at the warn level.
1409 /// This functions similarly to the [`event!`] macro. See [the top-level
1410 /// documentation][lib] for details on the syntax accepted by
1413 /// [`event!`]: macro.event.html
1414 /// [lib]: index.html#using-the-macros
1419 /// use tracing::warn;
1422 /// let warn_description = "Invalid Input";
1423 /// let input = &[0x27, 0x45];
1425 /// warn!(?input, warning = warn_description);
1427 /// target: "input_events",
1428 /// warning = warn_description,
1429 /// "Received warning for input: {:?}", input,
1435 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1436 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($field)* }
, $
($arg
)*)
1438 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1439 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1441 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1442 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1444 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1445 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, { $($k).+ $($field)+ }
)
1447 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1448 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::WARN
, {}
, $
($arg
)+)
1450 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1452 target
: module_path
!(),
1454 $
crate::Level
::WARN
,
1459 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1461 target
: module_path
!(),
1463 $
crate::Level
::WARN
,
1464 { $($k).+ = $($field)*}
1467 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1469 target
: module_path
!(),
1471 $
crate::Level
::WARN
,
1472 { ?$($k).+ = $($field)*}
1475 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1477 target
: module_path
!(),
1479 $
crate::Level
::WARN
,
1480 { %$($k).+ = $($field)*}
1483 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1485 target
: module_path
!(),
1487 $
crate::Level
::WARN
,
1488 { $($k).+, $($field)*}
1491 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1493 target
: module_path
!(),
1495 $
crate::Level
::WARN
,
1496 { ?$($k).+, $($field)*}
1499 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1501 target
: module_path
!(),
1503 $
crate::Level
::WARN
,
1504 { %$($k).+, $($field)*}
1507 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1509 target
: module_path
!(),
1511 $
crate::Level
::WARN
,
1516 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1517 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { $($field)* }
, $
($arg
)*)
1519 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)* ) => (
1520 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { $($k).+ $($field)* }
)
1522 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)* ) => (
1523 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { ?$($k).+ $($field)* }
)
1525 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)* ) => (
1526 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, { %$($k).+ $($field)* }
)
1528 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1529 $
crate::event
!(target
: $target
, $
crate::Level
::WARN
, {}
, $
($arg
)+)
1531 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1533 target
: module_path
!(),
1534 $
crate::Level
::WARN
,
1539 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1541 target
: module_path
!(),
1542 $
crate::Level
::WARN
,
1543 { $($k).+ = $($field)*}
1546 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1548 target
: module_path
!(),
1549 $
crate::Level
::WARN
,
1550 { ?$($k).+ = $($field)*}
1553 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1555 target
: module_path
!(),
1556 $
crate::Level
::TRACE
,
1557 { %$($k).+ = $($field)*}
1560 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1562 target
: module_path
!(),
1563 $
crate::Level
::WARN
,
1564 { $($k).+, $($field)*}
1567 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1569 target
: module_path
!(),
1570 $
crate::Level
::WARN
,
1571 { ?$($k).+, $($field)*}
1574 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1576 target
: module_path
!(),
1577 $
crate::Level
::WARN
,
1578 { %$($k).+, $($field)*}
1581 (?$
($k
:ident
).+) => (
1583 target
: module_path
!(),
1584 $
crate::Level
::WARN
,
1588 (%$
($k
:ident
).+) => (
1590 target
: module_path
!(),
1591 $
crate::Level
::WARN
,
1595 ($
($k
:ident
).+) => (
1597 target
: module_path
!(),
1598 $
crate::Level
::WARN
,
1604 target
: module_path
!(),
1605 $
crate::Level
::WARN
,
1612 /// Constructs an event at the error level.
1614 /// This functions similarly to the [`event!`] macro. See [the top-level
1615 /// documentation][lib] for details on the syntax accepted by
1618 /// [`event!`]: macro.event.html
1619 /// [lib]: index.html#using-the-macros
1624 /// use tracing::error;
1627 /// let (err_info, port) = ("No connection", 22);
1629 /// error!(port, error = %err_info);
1630 /// error!(target: "app_events", "App Error: {}", err_info);
1631 /// error!({ info = err_info }, "error on port: {}", port);
1635 macro_rules
! error
{
1636 (target
: $target
:expr
, parent
: $parent
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1637 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($field)* }
, $
($arg
)*)
1639 (target
: $target
:expr
, parent
: $parent
:expr
, $
($k
:ident
).+ $
($field
:tt
)+ ) => (
1640 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1642 (target
: $target
:expr
, parent
: $parent
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1643 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1645 (target
: $target
:expr
, parent
: $parent
:expr
, %$
($k
:ident
).+ $
($field
:tt
)+ ) => (
1646 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, { $($k).+ $($field)+ }
)
1648 (target
: $target
:expr
, parent
: $parent
:expr
, $
($arg
:tt
)+ ) => (
1649 $
crate::event
!(target
: $target
, parent
: $parent
, $
crate::Level
::ERROR
, {}
, $
($arg
)+)
1651 (parent
: $parent
:expr
, { $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1653 target
: module_path
!(),
1655 $
crate::Level
::ERROR
,
1660 (parent
: $parent
:expr
, $
($k
:ident
).+ = $
($field
:tt
)*) => (
1662 target
: module_path
!(),
1664 $
crate::Level
::ERROR
,
1665 { $($k).+ = $($field)*}
1668 (parent
: $parent
:expr
, ?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1670 target
: module_path
!(),
1672 $
crate::Level
::ERROR
,
1673 { ?$($k).+ = $($field)*}
1676 (parent
: $parent
:expr
, %$
($k
:ident
).+ = $
($field
:tt
)*) => (
1678 target
: module_path
!(),
1680 $
crate::Level
::ERROR
,
1681 { %$($k).+ = $($field)*}
1684 (parent
: $parent
:expr
, $
($k
:ident
).+, $
($field
:tt
)*) => (
1686 target
: module_path
!(),
1688 $
crate::Level
::ERROR
,
1689 { $($k).+, $($field)*}
1692 (parent
: $parent
:expr
, ?$
($k
:ident
).+, $
($field
:tt
)*) => (
1694 target
: module_path
!(),
1696 $
crate::Level
::ERROR
,
1697 { ?$($k).+, $($field)*}
1700 (parent
: $parent
:expr
, %$
($k
:ident
).+, $
($field
:tt
)*) => (
1702 target
: module_path
!(),
1704 $
crate::Level
::ERROR
,
1705 { %$($k).+, $($field)*}
1708 (parent
: $parent
:expr
, $
($arg
:tt
)+) => (
1710 target
: module_path
!(),
1712 $
crate::Level
::ERROR
,
1717 (target
: $target
:expr
, { $($field:tt)* }
, $
($arg
:tt
)* ) => (
1718 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { $($field)* }
, $
($arg
)*)
1720 (target
: $target
:expr
, $
($k
:ident
).+ $
($field
:tt
)* ) => (
1721 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { $($k).+ $($field)* }
)
1723 (target
: $target
:expr
, ?$
($k
:ident
).+ $
($field
:tt
)* ) => (
1724 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { ?$($k).+ $($field)* }
)
1726 (target
: $target
:expr
, %$
($k
:ident
).+ $
($field
:tt
)* ) => (
1727 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, { %$($k).+ $($field)* }
)
1729 (target
: $target
:expr
, $
($arg
:tt
)+ ) => (
1730 $
crate::event
!(target
: $target
, $
crate::Level
::ERROR
, {}
, $
($arg
)+)
1732 ({ $($field:tt)+ }
, $
($arg
:tt
)+ ) => (
1734 target
: module_path
!(),
1735 $
crate::Level
::ERROR
,
1740 ($
($k
:ident
).+ = $
($field
:tt
)*) => (
1742 target
: module_path
!(),
1743 $
crate::Level
::ERROR
,
1744 { $($k).+ = $($field)*}
1747 (?$
($k
:ident
).+ = $
($field
:tt
)*) => (
1749 target
: module_path
!(),
1750 $
crate::Level
::ERROR
,
1751 { ?$($k).+ = $($field)*}
1754 (%$
($k
:ident
).+ = $
($field
:tt
)*) => (
1756 target
: module_path
!(),
1757 $
crate::Level
::ERROR
,
1758 { %$($k).+ = $($field)*}
1761 ($
($k
:ident
).+, $
($field
:tt
)*) => (
1763 target
: module_path
!(),
1764 $
crate::Level
::ERROR
,
1765 { $($k).+, $($field)*}
1768 (?$
($k
:ident
).+, $
($field
:tt
)*) => (
1770 target
: module_path
!(),
1771 $
crate::Level
::ERROR
,
1772 { ?$($k).+, $($field)*}
1775 (%$
($k
:ident
).+, $
($field
:tt
)*) => (
1777 target
: module_path
!(),
1778 $
crate::Level
::ERROR
,
1779 { %$($k).+, $($field)*}
1782 (?$
($k
:ident
).+) => (
1784 target
: module_path
!(),
1785 $
crate::Level
::ERROR
,
1789 (%$
($k
:ident
).+) => (
1791 target
: module_path
!(),
1792 $
crate::Level
::ERROR
,
1796 ($
($k
:ident
).+) => (
1798 target
: module_path
!(),
1799 $
crate::Level
::ERROR
,
1805 target
: module_path
!(),
1806 $
crate::Level
::ERROR
,
1813 /// Constructs a new static callsite for a span or event.
1816 macro_rules
! callsite
{
1817 (name
: $name
:expr
, kind
: $kind
:expr
, fields
: $
($fields
:tt
)*) => {{
1821 target
: module_path
!(),
1822 level
: $
crate::Level
::TRACE
,
1830 fields
: $
($fields
:tt
)*
1835 target
: module_path
!(),
1843 target
: $target
:expr
,
1845 fields
: $
($fields
:tt
)*
1847 use $
crate::__macro_support
::MacroCallsite
;
1848 static META
: $
crate::Metadata
<'
static> = {
1853 fields
: $
crate::fieldset
!( $
($fields
)* ),
1854 callsite
: &CALLSITE
,
1858 static CALLSITE
: MacroCallsite
= MacroCallsite
::new(&META
);
1859 CALLSITE
.register();
1864 /// Constructs a new static callsite for a span or event.
1867 macro_rules
! callsite2
{
1868 (name
: $name
:expr
, kind
: $kind
:expr
, fields
: $
($fields
:tt
)*) => {{
1869 $
crate::callsite2
! {
1872 target
: module_path
!(),
1873 level
: $
crate::Level
::TRACE
,
1881 fields
: $
($fields
:tt
)*
1883 $
crate::callsite2
! {
1886 target
: module_path
!(),
1894 target
: $target
:expr
,
1896 fields
: $
($fields
:tt
)*
1898 use $
crate::__macro_support
::MacroCallsite
;
1899 static META
: $
crate::Metadata
<'
static> = {
1904 fields
: $
crate::fieldset
!( $
($fields
)* ),
1905 callsite
: &CALLSITE
,
1909 MacroCallsite
::new(&META
)
1914 // TODO: determine if this ought to be public API?`
1916 macro_rules
! level_enabled
{
1918 $lvl
<= $
crate::level_filters
::STATIC_MAX_LEVEL
1919 && $lvl
<= $
crate::level_filters
::LevelFilter
::current()
1925 macro_rules
! valueset
{
1927 // === base case ===
1928 (@ { $(,)* $($val:expr),* $(,)* }
, $next
:expr $
(,)*) => {
1932 // === recursive case (more tts) ===
1934 // TODO(#1138): determine a new syntax for uninitialized span fields, and
1936 // (@{ $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = _, $($rest:tt)*) => {
1937 // $crate::valueset!(@ { $($out),*, (&$next, None) }, $next, $($rest)*)
1939 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)*) => {
1941 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
1946 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = %$val
:expr
, $
($rest
:tt
)*) => {
1948 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
1953 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)*) => {
1955 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
1960 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+, $
($rest
:tt
)*) => {
1962 @ { $($out),*, (&$next, Some(&$($k).+ as &Value)) }
,
1967 (@ { $(,)* $($out:expr),* }
, $next
:expr
, ?$
($k
:ident
).+, $
($rest
:tt
)*) => {
1969 @ { $($out),*, (&$next, Some(&debug(&$($k).+) as &Value)) }
,
1974 (@ { $(,)* $($out:expr),* }
, $next
:expr
, %$
($k
:ident
).+, $
($rest
:tt
)*) => {
1976 @ { $($out),*, (&$next, Some(&display(&$($k).+) as &Value)) }
,
1981 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = ?$val
:expr
) => {
1983 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
1987 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = %$val
:expr
) => {
1989 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
1993 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+ = $val
:expr
) => {
1995 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
1999 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($k
:ident
).+) => {
2001 @ { $($out),*, (&$next, Some(&$($k).+ as &Value)) }
,
2005 (@ { $(,)* $($out:expr),* }
, $next
:expr
, ?$
($k
:ident
).+) => {
2007 @ { $($out),*, (&$next, Some(&debug(&$($k).+) as &Value)) }
,
2011 (@ { $(,)* $($out:expr),* }
, $next
:expr
, %$
($k
:ident
).+) => {
2013 @ { $($out),*, (&$next, Some(&display(&$($k).+) as &Value)) }
,
2018 // Handle literal names
2019 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= ?$val
:expr
, $
($rest
:tt
)*) => {
2021 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
2026 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= %$val
:expr
, $
($rest
:tt
)*) => {
2028 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
2033 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= $val
:expr
, $
($rest
:tt
)*) => {
2035 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
2040 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= ?$val
:expr
) => {
2042 @ { $($out),*, (&$next, Some(&debug(&$val) as &Value)) }
,
2046 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= %$val
:expr
) => {
2048 @ { $($out),*, (&$next, Some(&display(&$val) as &Value)) }
,
2052 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $k
:literal
= $val
:expr
) => {
2054 @ { $($out),*, (&$next, Some(&$val as &Value)) }
,
2059 // Remainder is unparseable, but exists --- must be format args!
2060 (@ { $(,)* $($out:expr),* }
, $next
:expr
, $
($rest
:tt
)+) => {
2061 $
crate::valueset
!(@ { (&$next, Some(&format_args!($($rest)+) as &Value)), $($out),* }
, $next
, )
2065 ($fields
:expr
, $
($kvs
:tt
)+) => {
2067 #[allow(unused_imports)]
2068 use $
crate::field
::{debug, display, Value}
;
2069 let mut iter
= $fields
.iter();
2070 $fields
.value_set($
crate::valueset
!(
2072 iter
.next().expect("FieldSet corrupted (this is a bug)"),
2077 ($fields
:expr
,) => {
2079 $fields
.value_set(&[])
2086 macro_rules
! fieldset
{
2088 (@ { $(,)* $($out:expr),* $(,)* } $
(,)*) => {
2092 // == recursive cases (more tts) ==
2093 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)*) => {
2094 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2096 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+ = %$val
:expr
, $
($rest
:tt
)*) => {
2097 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2099 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)*) => {
2100 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2102 // TODO(#1138): determine a new syntax for uninitialized span fields, and
2104 // (@ { $($out:expr),* } $($k:ident).+ = _, $($rest:tt)*) => {
2105 // $crate::fieldset!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $($rest)*)
2107 (@ { $(,)* $($out:expr),* } ?$
($k
:ident
).+, $
($rest
:tt
)*) => {
2108 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2110 (@ { $(,)* $($out:expr),* }
%$
($k
:ident
).+, $
($rest
:tt
)*) => {
2111 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2113 (@ { $(,)* $($out:expr),* } $
($k
:ident
).+, $
($rest
:tt
)*) => {
2114 $
crate::fieldset
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+) } $
($rest
)*)
2117 // Handle literal names
2118 (@ { $(,)* $($out:expr),* } $k
:literal
= ?$val
:expr
, $
($rest
:tt
)*) => {
2119 $
crate::fieldset
!(@ { $($out),*, $k } $
($rest
)*)
2121 (@ { $(,)* $($out:expr),* } $k
:literal
= %$val
:expr
, $
($rest
:tt
)*) => {
2122 $
crate::fieldset
!(@ { $($out),*, $k } $
($rest
)*)
2124 (@ { $(,)* $($out:expr),* } $k
:literal
= $val
:expr
, $
($rest
:tt
)*) => {
2125 $
crate::fieldset
!(@ { $($out),*, $k } $
($rest
)*)
2128 // Remainder is unparseable, but exists --- must be format args!
2129 (@ { $(,)* $($out:expr),* } $
($rest
:tt
)+) => {
2130 $
crate::fieldset
!(@ { "message", $($out),*, }
)
2135 $
crate::fieldset
!(@ { } $
($args
)*,)
2140 #[cfg(feature = "log")]
2143 macro_rules
! level_to_log
{
2146 $
crate::Level
::ERROR
=> $
crate::log
::Level
::Error
,
2147 $
crate::Level
::WARN
=> $
crate::log
::Level
::Warn
,
2148 $
crate::Level
::INFO
=> $
crate::log
::Level
::Info
,
2149 $
crate::Level
::DEBUG
=> $
crate::log
::Level
::Debug
,
2150 _
=> $
crate::log
::Level
::Trace
,
2157 macro_rules
! __tracing_stringify
{
2163 #[cfg(not(feature = "log"))]
2166 macro_rules
! __tracing_log
{
2167 (target
: $target
:expr
, $level
:expr
, $
($field
:tt
)+ ) => {}
;
2170 #[cfg(feature = "log")]
2173 macro_rules
! __mk_format_string
{
2174 // === base case ===
2175 (@ { $(,)* $($out:expr),* $(,)* } $
(,)*) => {
2179 // === recursive case (more tts), ===
2180 // ====== shorthand field syntax ===
2181 (@ { $(,)* $($out:expr),* }
, ?$
($k
:ident
).+, $
($rest
:tt
)*) => {
2182 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2184 (@ { $(,)* $($out:expr),* }, %$($k:ident).+, $($rest:tt)*) => {
2185 $crate::__mk_format_string!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={} " }, $
($rest
)*)
2187 (@ { $(,)* $($out:expr),* }
, $
($k
:ident
).+, $
($rest
:tt
)*) => {
2188 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2190 // ====== kv field syntax ===
2191 (@ { $(,)* $($out:expr),* }, message = $val:expr, $($rest:tt)*) => {
2192 $crate::__mk_format_string!(@ { $($out),*, "{} " }, $
($rest
)*)
2194 (@ { $(,)* $($out:expr),* }
, $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)*) => {
2195 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2197 (@ { $(,)* $($out:expr),* }, $($k:ident).+ = %$val:expr, $($rest:tt)*) => {
2198 $crate::__mk_format_string!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={} " }, $
($rest
)*)
2200 (@ { $(,)* $($out:expr),* }
, $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)*) => {
2201 $
crate::__mk_format_string
!(@ { $($out),*, $crate::__tracing_stringify!($($k).+), "={:?}
" }, $($rest)*)
2204 // === rest is unparseable --- must be fmt args ===
2205 (@ { $(,)* $($out:expr),* }, $($rest:tt)+) => {
2206 $crate::__mk_format_string!(@ { "{} ", $
($out
),* }, )
2211 $
crate::__mk_format_string
!(@ { }
, $
($kvs
)+,)
2218 #[cfg(feature = "log")]
2221 macro_rules
! __mk_format_args
{
2222 // === finished --- called into by base cases ===
2223 (@ { $(,)* $($out:expr),* $(,)* }
, $fmt
:expr
, fields
: $
(,)*) => {
2224 format_args
!($fmt
, $
($out
),*)
2227 // === base case (no more tts) ===
2228 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = ?$val
:expr $
(,)*) => {
2229 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: )
2231 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = %$val
:expr $
(,)*) => {
2232 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: )
2234 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = $val
:expr $
(,)*) => {
2235 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: )
2237 // ====== shorthand field syntax ===
2238 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: ?$
($k
:ident
).+ $
(,)*) => {
2239 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
:)
2241 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: %$
($k
:ident
).+ $
(,)*) => {
2242 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: )
2244 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ $
(,)*) => {
2245 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: )
2248 // === recursive case (more tts) ===
2249 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = ?$val
:expr
, $
($rest
:tt
)+) => {
2250 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: $
($rest
)+)
2252 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = %$val
:expr
, $
($rest
:tt
)+) => {
2253 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: $
($rest
)+)
2255 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+ = $val
:expr
, $
($rest
:tt
)+) => {
2256 $
crate::__mk_format_args
!(@ { $($out),*, $val }
, $fmt
, fields
: $
($rest
)+)
2258 // ====== shorthand field syntax ===
2259 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: ?$
($k
:ident
).+, $
($rest
:tt
)+) => {
2260 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: $
($rest
)+)
2262 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: %$
($k
:ident
).+, $
($rest
:tt
)+) => {
2263 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: $
($rest
)+)
2265 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($k
:ident
).+, $
($rest
:tt
)+) => {
2266 $
crate::__mk_format_args
!(@ { $($out),*, &$($k).+ }
, $fmt
, fields
: $
($rest
)+)
2269 // === rest is unparseable --- must be fmt args ===
2270 (@ { $(,)* $($out:expr),* }
, $fmt
:expr
, fields
: $
($rest
:tt
)+) => {
2271 $
crate::__mk_format_args
!(@ { format_args!($($rest)+), $($out),* }
, $fmt
, fields
: )
2277 #[allow(unused_imports)]
2278 use $
crate::field
::{debug, display}
;
2279 // use $crate::__mk_format_string;
2280 $
crate::__mk_format_args
!(@ { }
, $
crate::__mk_format_string
!($
($kv
)*), fields
: $
($kv
)*)
2285 #[cfg(feature = "log")]
2288 macro_rules
! __tracing_log
{
2289 (target
: $target
:expr
, $level
:expr
, $
($field
:tt
)+ ) => {
2290 $
crate::if_log_enabled
! { $level
, {
2292 let level
= $
crate::level_to_log
!($level
);
2293 if level
<= log
::max_level() {
2294 let log_meta
= log
::Metadata
::builder()
2298 let logger
= log
::logger();
2299 if logger
.enabled(&log_meta
) {
2300 logger
.log(&log
::Record
::builder()
2301 .file(Some(file
!()))
2302 .module_path(Some(module_path
!()))
2303 .line(Some(line
!()))
2305 .args($
crate::__mk_format_args
!($
($field
)+))
2313 #[cfg(not(feature = "log"))]
2316 macro_rules
! if_log_enabled
{
2317 ($lvl
:expr
, $e
:expr
;) => {
2318 $
crate::if_log_enabled
! { $lvl, $e }
2320 ($lvl
:expr
, $if_log
:block
) => {
2321 $
crate::if_log_enabled
! { $lvl, $if_log else {}
}
2323 ($lvl
:expr
, $if_log
:block
else $else_block
:block
) => {
2328 #[cfg(all(feature = "log", not(feature = "log-always")))]
2331 macro_rules
! if_log_enabled
{
2332 ($lvl
:expr
, $e
:expr
;) => {
2333 $
crate::if_log_enabled
! { $lvl, $e }
2335 ($lvl
:expr
, $if_log
:block
) => {
2336 $
crate::if_log_enabled
! { $lvl, $if_log else {}
}
2338 ($lvl
:expr
, $if_log
:block
else $else_block
:block
) => {
2339 if $
crate::level_to_log
!($lvl
) <= $
crate::log
::STATIC_MAX_LEVEL
{
2340 if !$
crate::dispatcher
::has_been_set() {
2351 #[cfg(all(feature = "log", feature = "log-always"))]
2354 macro_rules
! if_log_enabled
{
2355 ($lvl
:expr
, $e
:expr
;) => {
2356 $
crate::if_log_enabled
! { $lvl, $e }
2358 ($lvl
:expr
, $if_log
:block
) => {
2359 $
crate::if_log_enabled
! { $lvl, $if_log else {}
}
2361 ($lvl
:expr
, $if_log
:block
else $else_block
:block
) => {
2362 if $
crate::level_to_log
!($lvl
) <= $
crate::log
::STATIC_MAX_LEVEL
{
2363 #[allow(unused_braces)]