mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-08 00:00:13 +02:00
trace-core: Introduce callsite classification in metadata (#1046)
## Motivation To ease the implementation of `Subscriber::register_callsite`, a field should be added to `Metadata` to indicate if this callsite is an event or a span. ## Solution A new struct, `Kind`, is added to the `metadata` module in `tokio-trace-core`, and a `Kind` field is added to the `Metadata` struct. Macros which construct `metadata` now require a `Kind`. `Kind` is represented as a struct with a private inner enum to allow new `Kind`s to be added without breaking changes. However, the _addition_ of the kind field _is_ a breaking change. While this could be done in a backward-compatible way, it would permit the construction of metadata with unknown kinds, and since the next `tokio-trace-core` release will be a breaking change, I opted to make the breaking change instead. New API tests for the `callsite!` and `metadata!` macros have been added to guard against future API breakage. Fixes: #986 Closes: #1008 Co-Authored-By: csmoe <[email protected]>
This commit is contained in:
@@ -102,6 +102,7 @@ macro_rules! span {
|
||||
use $crate::callsite::Callsite;
|
||||
let callsite = callsite! {
|
||||
name: $name,
|
||||
kind: $crate::metadata::Kind::SPAN,
|
||||
target: $target,
|
||||
level: $lvl,
|
||||
fields: $($($k).+),*
|
||||
@@ -128,6 +129,7 @@ macro_rules! span {
|
||||
use $crate::callsite::Callsite;
|
||||
let callsite = callsite! {
|
||||
name: $name,
|
||||
kind: $crate::metadata::Kind::SPAN,
|
||||
target: $target,
|
||||
level: $lvl,
|
||||
fields: $( $($k).+ ),*
|
||||
@@ -742,6 +744,7 @@ macro_rules! event {
|
||||
":",
|
||||
__tokio_trace_line!()
|
||||
),
|
||||
kind: $crate::metadata::Kind::EVENT,
|
||||
target: $target,
|
||||
level: $lvl,
|
||||
fields: $( $($k).+ ),*
|
||||
@@ -1223,17 +1226,24 @@ macro_rules! error {
|
||||
#[doc(hidden)]
|
||||
#[macro_export(local_inner_macros)]
|
||||
macro_rules! callsite {
|
||||
(name: $name:expr, fields: $( $field_name:expr ),* $(,)*) => ({
|
||||
(name: $name:expr, kind: $kind:expr, fields: $( $field_name:expr ),* $(,)*) => ({
|
||||
callsite! {
|
||||
name: $name,
|
||||
kind: $kind,
|
||||
target: __tokio_trace_module_path!(),
|
||||
level: $crate::Level::TRACE,
|
||||
fields: $( $field_name ),*
|
||||
}
|
||||
});
|
||||
(name: $name:expr, level: $lvl:expr, fields: $( $field_name:expr ),* $(,)*) => ({
|
||||
(
|
||||
name: $name:expr,
|
||||
kind: $kind:expr,
|
||||
level: $lvl:expr,
|
||||
fields: $( $field_name:expr ),* $(,)*
|
||||
) => ({
|
||||
callsite! {
|
||||
name: $name,
|
||||
kind: $kind,
|
||||
target: __tokio_trace_module_path!(),
|
||||
level: $lvl,
|
||||
fields: $( $field_name ),*
|
||||
@@ -1241,6 +1251,7 @@ macro_rules! callsite {
|
||||
});
|
||||
(
|
||||
name: $name:expr,
|
||||
kind: $kind:expr,
|
||||
target: $target:expr,
|
||||
level: $lvl:expr,
|
||||
fields: $( $field_name:expr ),*
|
||||
@@ -1256,6 +1267,7 @@ macro_rules! callsite {
|
||||
level: $lvl,
|
||||
fields: &[ $( __tokio_trace_stringify!($field_name) ),* ],
|
||||
callsite: &MyCallsite,
|
||||
kind: $kind,
|
||||
}
|
||||
};
|
||||
// FIXME: Rust 1.34 deprecated ATOMIC_USIZE_INIT. When Tokio's minimum
|
||||
|
||||
Reference in New Issue
Block a user