@@ -807,6 +807,70 @@ macro_rules! event {
807
807
) ;
808
808
}
809
809
810
+ /// Tests whether an event with the specified level and target would be enabled.
811
+ ///
812
+ /// This is similar to [`enabled!`], but queries the current subscriber specifically for
813
+ /// an event, whereas [`enabled!`] queries for an event _or_ span.
814
+ ///
815
+ /// See the documentation for [`enabled!]` for more details on using this macro.
816
+ /// See also [`span_enabled!`].
817
+ ///
818
+ /// # Examples
819
+ ///
820
+ /// ```rust
821
+ /// # use tracing::{event_enabled, Level};
822
+ /// if event_enabled!(target: "my_crate", Level::DEBUG) {
823
+ /// // some expensive work...
824
+ /// }
825
+ /// // simpler
826
+ /// if event_enabled!(Level::DEBUG) {
827
+ /// // some expensive work...
828
+ /// }
829
+ /// // with fields
830
+ /// if event_enabled!(Level::DEBUG, foo_field) {
831
+ /// // some expensive work...
832
+ /// }
833
+ /// ```
834
+ ///
835
+ #[ macro_export]
836
+ macro_rules! event_enabled {
837
+ ( $( $rest: tt) * ) => (
838
+ $crate:: enabled!( kind: $crate:: metadata:: Kind :: EVENT , $( $rest) * )
839
+ )
840
+ }
841
+
842
+ /// Tests whether a span with the specified level and target would be enabled.
843
+ ///
844
+ /// This is similar to [`enabled!`], but queries the current subscriber specifically for
845
+ /// an event, whereas [`enabled!`] queries for an event _or_ span.
846
+ ///
847
+ /// See the documentation for [`enabled!]` for more details on using this macro.
848
+ /// See also [`span_enabled!`].
849
+ ///
850
+ /// # Examples
851
+ ///
852
+ /// ```rust
853
+ /// # use tracing::{span_enabled, Level};
854
+ /// if span_enabled!(target: "my_crate", Level::DEBUG) {
855
+ /// // some expensive work...
856
+ /// }
857
+ /// // simpler
858
+ /// if span_enabled!(Level::DEBUG) {
859
+ /// // some expensive work...
860
+ /// }
861
+ /// // with fields
862
+ /// if span_enabled!(Level::DEBUG, foo_field) {
863
+ /// // some expensive work...
864
+ /// }
865
+ /// ```
866
+ ///
867
+ #[ macro_export]
868
+ macro_rules! span_enabled {
869
+ ( $( $rest: tt) * ) => (
870
+ $crate:: enabled!( kind: $crate:: metadata:: Kind :: SPAN , $( $rest) * )
871
+ )
872
+ }
873
+
810
874
/// Checks whether a span or event is [enabled] based on the provided [metadata].
811
875
///
812
876
/// [enabled]: crate::Subscriber::enabled
@@ -884,9 +948,21 @@ macro_rules! event {
884
948
/// }
885
949
/// ```
886
950
///
951
+ /// # Alternatives
952
+ ///
953
+ /// `enabled!` queries subscribers with [`Metadata`] where
954
+ /// [`is_event`] and [`is_span`] both return `false`. Alternatively,
955
+ /// use [`event_enabled!`] or [`span_enabled!`] to ensure one of these
956
+ /// returns true.
957
+ ///
958
+ ///
959
+ /// [`Metadata`]: crate::Metadata
960
+ /// [`is_event`]: crate::Metadata::is_event
961
+ /// [`is_span`]: crate::Metadata::is_span
962
+ ///
887
963
#[ macro_export]
888
964
macro_rules! enabled {
889
- ( target: $target: expr, $lvl: expr, { $( $fields: tt) * } ) => ( {
965
+ ( kind : $kind : expr , target: $target: expr, $lvl: expr, { $( $fields: tt) * } ) => ( {
890
966
if $crate:: level_enabled!( $lvl) {
891
967
use $crate:: __macro_support:: Callsite as _;
892
968
static CALLSITE : $crate:: __macro_support:: MacroCallsite = $crate:: callsite2! {
@@ -896,7 +972,7 @@ macro_rules! enabled {
896
972
":" ,
897
973
line!( )
898
974
) ,
899
- kind: $crate :: metadata :: Kind :: HINT ,
975
+ kind: $kind . hint ( ) ,
900
976
target: $target,
901
977
level: $lvl,
902
978
fields: $( $fields) *
@@ -913,29 +989,57 @@ macro_rules! enabled {
913
989
}
914
990
} ) ;
915
991
// Just target and level
992
+ ( kind: $kind: expr, target: $target: expr, $lvl: expr ) => (
993
+ $crate:: enabled!( kind: $kind, target: $target, $lvl, { } )
994
+ ) ;
916
995
( target: $target: expr, $lvl: expr ) => (
917
- $crate:: enabled!( target: $target, $lvl, { } )
996
+ $crate:: enabled!( kind : $crate :: metadata :: Kind :: HINT , target: $target, $lvl, { } )
918
997
) ;
919
998
920
- // These two cases handle fields with no values
999
+ // These four cases handle fields with no values
1000
+ ( kind: $kind: expr, target: $target: expr, $lvl: expr, $( $field: tt) * ) => (
1001
+ $crate:: enabled!(
1002
+ kind: $kind,
1003
+ target: $target,
1004
+ $lvl,
1005
+ { $( $field) * }
1006
+ )
1007
+ ) ;
921
1008
( target: $target: expr, $lvl: expr, $( $field: tt) * ) => (
922
1009
$crate:: enabled!(
1010
+ kind: $crate:: metadata:: Kind :: HINT ,
923
1011
target: $target,
924
1012
$lvl,
925
1013
{ $( $field) * }
926
1014
)
927
1015
) ;
928
- ( $lvl: expr, $( $field: tt) * ) => (
1016
+
1017
+ // Level and field case
1018
+ ( kind: $kind: expr, $lvl: expr, $( $field: tt) * ) => (
929
1019
$crate:: enabled!(
1020
+ kind: $kind,
930
1021
target: module_path!( ) ,
931
1022
$lvl,
932
1023
{ $( $field) * }
933
1024
)
934
1025
) ;
935
1026
936
1027
// Simplest `enabled!` case
937
- ( $lvl: expr ) => (
938
- $crate:: enabled!( target: module_path!( ) , $lvl, { } )
1028
+ ( kind: $kind: expr, $lvl: expr) => (
1029
+ $crate:: enabled!( kind: $kind, target: module_path!( ) , $lvl, { } )
1030
+ ) ;
1031
+ ( $lvl: expr) => (
1032
+ $crate:: enabled!( kind: $crate:: metadata:: Kind :: HINT , target: module_path!( ) , $lvl, { } )
1033
+ ) ;
1034
+
1035
+ // Fallthrough from above
1036
+ ( $lvl: expr, $( $field: tt) * ) => (
1037
+ $crate:: enabled!(
1038
+ kind: $crate:: metadata:: Kind :: HINT ,
1039
+ target: module_path!( ) ,
1040
+ $lvl,
1041
+ { $( $field) * }
1042
+ )
939
1043
) ;
940
1044
}
941
1045
0 commit comments