You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
tracing: fix event macros with constant field names in the first position (tokio-rs#2883)
## Motivation
Const argumetns in `level!` macros do not work when in the first
position.
This also seems to have fixedtokio-rs#2748 where literals for fields names like
`info!("foo" = 2)` could not be used outside the `event!` macro.
Fixestokio-rs#2837Fixestokio-rs#2738
## Solution
Previsously, `level!($(args:tt))` was forwarded to `event!(target: ...,
level: ..., { $(args:tt) })` but the added curly braces seem to have
prevented the `event` macro from correctly understanding the arguments
and it tried to pass them to `format!`.
With this change there may have some performance impact when expanding
the macros in most cases where the braces could have been added as it
will take one more step.
These are the two relevant `event!` blocks I believe, the new tests used
to expand to the first one (with empty fields), now they expand to the
latter:
```
(target: $target:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
$crate::event!(
target: $target,
$lvl,
{ message = $crate::__macro_support::format_args!($($arg)+), $($fields)* }
)
);
(target: $target:expr, $lvl:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, $lvl, { $($arg)+ })
);
```
0 commit comments