Skip to content

Commit bb52b2d

Browse files
committed
implement enabled_span and enabled_event
1 parent a2ccb98 commit bb52b2d

File tree

3 files changed

+83
-15
lines changed

3 files changed

+83
-15
lines changed

tracing/src/macros.rs

Lines changed: 66 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -878,9 +878,63 @@ macro_rules! event {
878878
/// }
879879
/// ```
880880
///
881+
/// # Alternatives
882+
///
883+
/// `enabled!` queries subscribers with [`Metadata`] where
884+
/// [`is_event`] and [`is_span`] both return `false`. Alternatively,
885+
/// use [`enabled_event`] or [`enabled_span`] to ensure one of these
886+
/// returns true.
887+
///
888+
///
889+
/// [`Metadata`]: crate::Metadata
890+
/// [`is_event`]: crate::Metadata::is_event
891+
/// [`is_span`]: crate::Metadata::is_span
892+
/// [`enabled_event`]: crate::enabled_event
893+
/// [`enabled_span`]: crate::enabled_span
894+
///
881895
#[macro_export]
882896
macro_rules! enabled {
883-
(target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
897+
($($rest:tt)*)=> (
898+
$crate::_enabled!(kind: { $crate::metadata::Kind::HINT }, $($rest)*)
899+
)
900+
}
901+
902+
/// The same as [`enabled`], but queries subscribers with `Metadata` where
903+
/// [`Metadata::is_event`] returns true.
904+
///
905+
/// See also [`enabled_span`].
906+
///
907+
/// [`enabled`]: crate::enabled
908+
/// [`Metadata::is_event`]: crate::Metadata::is_event
909+
/// [`enabled_span`]: crate::enabled_span
910+
///
911+
#[macro_export]
912+
macro_rules! enabled_event {
913+
($($rest:tt)*)=> (
914+
$crate::_enabled!(kind: $crate::metadata::Kind::EVENT.hint(), $($rest)*)
915+
)
916+
}
917+
918+
/// The same as [`enabled`], but queries subscribers with `Metadata` where
919+
/// [`Metadata::is_span`] returns true.
920+
///
921+
/// See also [`enabled_event`].
922+
///
923+
/// [`enabled`]: crate::enabled
924+
/// [`Metadata::is_span`]: crate::Metadata::is_span
925+
/// [`enabled_event`]: crate::enabled_event
926+
///
927+
#[macro_export]
928+
macro_rules! enabled_span {
929+
($($rest:tt)*)=> (
930+
$crate::_enabled!(kind: $crate::metadata::Kind::SPAN.hint(), $($rest)*)
931+
)
932+
}
933+
934+
#[doc(hidden)]
935+
#[macro_export]
936+
macro_rules! _enabled {
937+
(kind: $kind:expr, target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
884938
if $crate::level_enabled!($lvl) {
885939
use $crate::__macro_support::Callsite as _;
886940
static CALLSITE: $crate::__macro_support::MacroCallsite = $crate::callsite2! {
@@ -890,7 +944,7 @@ macro_rules! enabled {
890944
":",
891945
line!()
892946
),
893-
kind: $crate::metadata::Kind::HINT,
947+
kind: $kind,
894948
target: $target,
895949
level: $lvl,
896950
fields: $($fields)*
@@ -907,29 +961,31 @@ macro_rules! enabled {
907961
}
908962
});
909963
// Just target and level
910-
(target: $target:expr, $lvl:expr ) => (
911-
$crate::enabled!(target: $target, $lvl, { })
964+
(kind: $kind:expr, target: $target:expr, $lvl:expr ) => (
965+
$crate::_enabled!(kind: $kind, target: $target, $lvl, { })
912966
);
913967

914968
// These two cases handle fields with no values
915-
(target: $target:expr, $lvl:expr, $($field:tt)*) => (
916-
$crate::enabled!(
969+
(kind: $kind:expr, target: $target:expr, $lvl:expr, $($field:tt)*) => (
970+
$crate::_enabled!(
971+
kind: $kind,
917972
target: $target,
918973
$lvl,
919974
{ $($field)*}
920975
)
921976
);
922-
($lvl:expr, $($field:tt)*) => (
923-
$crate::enabled!(
977+
(kind: $kind:expr, $lvl:expr, $($field:tt)*) => (
978+
$crate::_enabled!(
979+
kind: $kind,
924980
target: module_path!(),
925981
$lvl,
926982
{ $($field)*}
927983
)
928984
);
929985

930986
// Simplest `enabled!` case
931-
( $lvl:expr ) => (
932-
$crate::enabled!(target: module_path!(), $lvl, { })
987+
(kind: $kind:expr, $lvl:expr ) => (
988+
$crate::_enabled!(kind: $kind, target: module_path!(), $lvl, { })
933989
);
934990
}
935991

tracing/tests/enabled.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,30 @@ use tracing::Level;
1010
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
1111
#[test]
1212
fn level_and_target() {
13-
let (collector, handle) = collector::mock()
13+
let collector = collector::mock()
1414
.with_filter(|meta| {
1515
if meta.target() == "debug_module" {
1616
meta.level() <= &Level::DEBUG
17+
} else if meta.is_span() {
18+
meta.level() <= &Level::TRACE
19+
} else if meta.is_event() {
20+
meta.level() <= &Level::DEBUG
1721
} else {
1822
meta.level() <= &Level::INFO
1923
}
2024
})
2125
.done()
22-
.run_with_handle();
26+
.run();
2327

2428
tracing::collect::set_global_default(collector).unwrap();
2529

2630
assert!(tracing::enabled!(target: "debug_module", Level::DEBUG));
2731
assert!(tracing::enabled!(Level::ERROR));
2832
assert!(!tracing::enabled!(Level::DEBUG));
29-
handle.assert_finished();
33+
34+
// Ensure that the `_event` and `_span` alternatives work corretly
35+
assert!(!tracing::enabled_event!(Level::TRACE));
36+
assert!(tracing::enabled_event!(Level::DEBUG));
37+
38+
assert!(tracing::enabled_span!(Level::TRACE));
3039
}

tracing/tests/macros.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![deny(warnings)]
22
use tracing::{
3-
callsite, debug, debug_span, enabled, error, error_span, event, info, info_span, span, trace,
4-
trace_span, warn, warn_span, Level,
3+
callsite, debug, debug_span, enabled, enabled_event, enabled_span, error, error_span, event,
4+
info, info_span, span, trace, trace_span, warn, warn_span, Level,
55
};
66

77
// Tests that macros work across various invocation syntax.
@@ -346,6 +346,9 @@ fn enabled() {
346346
enabled!(Level::DEBUG);
347347
enabled!(target: "rando", Level::DEBUG);
348348
enabled!(target: "rando", Level::DEBUG, field);
349+
350+
enabled_span!(target: "rando", Level::DEBUG, field);
351+
enabled_event!(target: "rando", Level::DEBUG, field);
349352
}
350353

351354
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]

0 commit comments

Comments
 (0)