aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Vander Stoep <jeffv@google.com>2024-02-06 09:14:09 +0100
committerJeff Vander Stoep <jeffv@google.com>2024-02-06 09:14:10 +0100
commit4647cbe7f8a1568d3cc82a43c97d23069abb3f72 (patch)
tree06fb932dc1a5e16957c77c797e9d63e34c01fbf1
parent84397d729b0e53e99c5f78728d5830843e10c77e (diff)
downloadtracing-4647cbe7f8a1568d3cc82a43c97d23069abb3f72.tar.gz
Upgrade tracing to 0.1.40
This project was upgraded with external_updater. Usage: tools/external_updater/updater.sh update external/rust/crates/tracing For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md Test: TreeHugger Change-Id: I3fb3686d0870590d5b81674996e90cf1ba80853a
-rw-r--r--.cargo_vcs_info.json6
-rw-r--r--Android.bp6
-rw-r--r--CHANGELOG.md135
-rw-r--r--Cargo.toml25
-rw-r--r--Cargo.toml.orig12
-rw-r--r--METADATA25
-rw-r--r--README.md16
-rw-r--r--src/field.rs6
-rw-r--r--src/instrument.rs85
-rw-r--r--src/level_filters.rs56
-rw-r--r--src/lib.rs64
-rw-r--r--src/macros.rs941
-rw-r--r--src/span.rs8
-rw-r--r--tests/enabled.rs4
-rw-r--r--tests/event.rs208
-rw-r--r--tests/filters_dont_leak.rs12
-rw-r--r--tests/instrument.rs59
-rw-r--r--tests/macros.rs624
-rw-r--r--tests/macros_redefined_core.rs18
-rw-r--r--tests/max_level_hint.rs8
-rw-r--r--tests/multiple_max_level_hints.rs18
-rw-r--r--tests/no_subscriber.rs9
-rw-r--r--tests/scoped_clobbers_default.rs4
-rw-r--r--tests/span.rs385
-rw-r--r--tests/subscriber.rs31
25 files changed, 2044 insertions, 721 deletions
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
new file mode 100644
index 0000000..33c8507
--- /dev/null
+++ b/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "15600a3a67c418f53cb80ff21da57d89a5de0486"
+ },
+ "path_in_vcs": "tracing"
+} \ No newline at end of file
diff --git a/Android.bp b/Android.bp
index edcf56c..6763dec 100644
--- a/Android.bp
+++ b/Android.bp
@@ -23,7 +23,7 @@ rust_library {
host_supported: true,
crate_name: "tracing",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.37",
+ cargo_pkg_version: "0.1.40",
srcs: ["src/lib.rs"],
edition: "2018",
features: [
@@ -33,7 +33,6 @@ rust_library {
"tracing-attributes",
],
rustlibs: [
- "libcfg_if",
"libpin_project_lite",
"libtracing_core",
],
@@ -51,12 +50,11 @@ rust_library {
host_supported: true,
crate_name: "tracing",
cargo_env_compat: true,
- cargo_pkg_version: "0.1.37",
+ cargo_pkg_version: "0.1.40",
srcs: ["src/lib.rs"],
edition: "2018",
features: ["max_level_off"],
rustlibs: [
- "libcfg_if",
"libpin_project_lite",
"libtracing_core",
],
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 978e0ca..db1668b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,138 @@
+# 0.1.40
+
+This release fixes a potential stack use-after-free in the
+`Instrument::into_inner` method. Only uses of this method are affected by this
+bug.
+
+### Fixed
+
+- Use `mem::ManuallyDrop` instead of `mem::forget` in `Instrument::into_inner`
+ ([#2765])
+
+[#2765]: https://github.com/tokio-rs/tracing/pull/2765
+
+Thanks to @cramertj and @manishearth for finding and fixing this issue!
+
+# 0.1.39 (October 12, 2023)
+
+This release adds several additional features to the `tracing` macros. In
+addition, it updates the `tracing-core` dependency to [v0.1.32][core-0.1.32] and
+the `tracing-attributes` dependency to [v0.1.27][attrs-0.1.27].
+
+### Added
+
+- Allow constant field names in macros ([#2617])
+- Allow setting event names in macros ([#2699])
+- **core**: Allow `ValueSet`s of any length ([#2508])
+
+### Changed
+
+- `tracing-attributes`: updated to [0.1.27][attrs-0.1.27]
+- `tracing-core`: updated to [0.1.32][core-0.1.32]
+- **attributes**: Bump minimum version of proc-macro2 to 1.0.60 ([#2732])
+- **attributes**: Generate less dead code for async block return type hint ([#2709])
+
+### Fixed
+
+- Use fully qualified names in macros for items exported from std prelude
+ ([#2621], [#2757])
+- **attributes**: Allow [`clippy::let_with_type_underscore`] in macro-generated
+ code ([#2609])
+- **attributes**: Allow `unknown_lints` in macro-generated code ([#2626])
+- **attributes**: Fix a compilation error in `#[instrument]` when the `"log"`
+ feature is enabled ([#2599])
+
+### Documented
+
+- Add `axum-insights` to relevant crates. ([#2713])
+- Fix link to RAI pattern crate documentation ([#2612])
+- Fix docs typos and warnings ([#2581])
+- Add `clippy-tracing` to related crates ([#2628])
+- Add `tracing-cloudwatch` to related crates ([#2667])
+- Fix deadlink to `tracing-etw` repo ([#2602])
+
+[#2617]: https://github.com/tokio-rs/tracing/pull/2617
+[#2699]: https://github.com/tokio-rs/tracing/pull/2699
+[#2508]: https://github.com/tokio-rs/tracing/pull/2508
+[#2621]: https://github.com/tokio-rs/tracing/pull/2621
+[#2713]: https://github.com/tokio-rs/tracing/pull/2713
+[#2581]: https://github.com/tokio-rs/tracing/pull/2581
+[#2628]: https://github.com/tokio-rs/tracing/pull/2628
+[#2667]: https://github.com/tokio-rs/tracing/pull/2667
+[#2602]: https://github.com/tokio-rs/tracing/pull/2602
+[#2626]: https://github.com/tokio-rs/tracing/pull/2626
+[#2757]: https://github.com/tokio-rs/tracing/pull/2757
+[#2732]: https://github.com/tokio-rs/tracing/pull/2732
+[#2709]: https://github.com/tokio-rs/tracing/pull/2709
+[#2599]: https://github.com/tokio-rs/tracing/pull/2599
+[`let_with_type_underscore`]: http://rust-lang.github.io/rust-clippy/rust-1.70.0/index.html#let_with_type_underscore
+[attrs-0.1.27]:
+ https://github.com/tokio-rs/tracing/releases/tag/tracing-attributes-0.1.27
+[core-0.1.32]:
+ https://github.com/tokio-rs/tracing/releases/tag/tracing-core-0.1.32
+
+# 0.1.38 (April 25th, 2023)
+
+This `tracing` release changes the `Drop` implementation for `Instrumented`
+`Future`s so that the attached `Span` is entered when dropping the `Future`. This
+means that events emitted by the `Future`'s `Drop` implementation will now be
+recorded within its `Span`. It also adds `#[inline]` hints to methods called in
+the `event!` macro's expansion, for an improvement in both binary size and
+performance.
+
+Additionally, this release updates the `tracing-attributes` dependency to
+[v0.1.24][attrs-0.1.24], which updates the [`syn`] dependency to v2.x.x.
+`tracing-attributes` v0.1.24 also includes improvements to the `#[instrument]`
+macro; see [the `tracing-attributes` 0.1.24 release notes][attrs-0.1.24] for
+details.
+
+### Added
+
+- `Instrumented` futures will now enter the attached `Span` in their `Drop`
+ implementation, allowing events emitted when dropping the future to occur
+ within the span ([#2562])
+- `#[inline]` attributes for methods called by the `event!` macros, making
+ generated code smaller ([#2555])
+- **attributes**: `level` argument to `#[instrument(err)]` and
+ `#[instrument(ret)]` to override the level of
+ the generated return value event ([#2335])
+- **attributes**: Improved compiler error message when `#[instrument]` is added to a `const fn`
+ ([#2418])
+
+### Changed
+
+- `tracing-attributes`: updated to [0.1.24][attrs-0.1.24]
+- Removed unneeded `cfg-if` dependency ([#2553])
+- **attributes**: Updated [`syn`] dependency to 2.0 ([#2516])
+
+### Fixed
+
+- **attributes**: Fix `clippy::unreachable` warnings in `#[instrument]`-generated code ([#2356])
+- **attributes**: Removed unused "visit" feature flag from `syn` dependency ([#2530])
+
+### Documented
+
+- **attributes**: Documented default level for `#[instrument(err)]` ([#2433])
+- **attributes**: Improved documentation for levels in `#[instrument]` ([#2350])
+
+Thanks to @nitnelave, @jsgf, @Abhicodes-crypto, @LukeMathWalker, @andrewpollack,
+@quad, @klensy, @davidpdrsn, @dbidwell94, @ldm0, @NobodyXu, @ilsv, and @daxpedda
+for contributing to this release!
+
+[`syn`]: https://crates.io/crates/syn
+[attrs-0.1.24]:
+ https://github.com/tokio-rs/tracing/releases/tag/tracing-attributes-0.1.24
+[#2565]: https://github.com/tokio-rs/tracing/pull/2565
+[#2555]: https://github.com/tokio-rs/tracing/pull/2555
+[#2553]: https://github.com/tokio-rs/tracing/pull/2553
+[#2335]: https://github.com/tokio-rs/tracing/pull/2335
+[#2418]: https://github.com/tokio-rs/tracing/pull/2418
+[#2516]: https://github.com/tokio-rs/tracing/pull/2516
+[#2356]: https://github.com/tokio-rs/tracing/pull/2356
+[#2530]: https://github.com/tokio-rs/tracing/pull/2530
+[#2433]: https://github.com/tokio-rs/tracing/pull/2433
+[#2350]: https://github.com/tokio-rs/tracing/pull/2350
+
# 0.1.37 (October 6, 2022)
This release of `tracing` incorporates changes from `tracing-core`
diff --git a/Cargo.toml b/Cargo.toml
index 90f084d..1143cd6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,9 +11,9 @@
[package]
edition = "2018"
-rust-version = "1.49.0"
+rust-version = "1.56.0"
name = "tracing"
-version = "0.1.37"
+version = "0.1.40"
authors = [
"Eliza Weisman <eliza@buoyant.io>",
"Tokio Contributors <team@tokio.rs>",
@@ -40,13 +40,13 @@ repository = "https://github.com/tokio-rs/tracing"
[package.metadata.docs.rs]
all-features = true
-rustdoc-args = [
- "--cfg",
- "docsrs",
+rustc-args = [
"--cfg",
"tracing_unstable",
]
-rustc-args = [
+rustdoc-args = [
+ "--cfg",
+ "docsrs",
"--cfg",
"tracing_unstable",
]
@@ -87,9 +87,6 @@ harness = false
name = "span_repeated"
harness = false
-[dependencies.cfg-if]
-version = "1.0.0"
-
[dependencies.log]
version = "0.4.17"
optional = true
@@ -98,16 +95,20 @@ optional = true
version = "0.2.9"
[dependencies.tracing-attributes]
-version = "0.1.23"
+version = "0.1.27"
optional = true
[dependencies.tracing-core]
-version = "0.1.30"
+version = "0.1.32"
default-features = false
[dev-dependencies.criterion]
version = "0.3.6"
-default-features = false
+default_features = false
+
+[dev-dependencies.futures]
+version = "0.3.21"
+default_features = false
[dev-dependencies.log]
version = "0.4.17"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 313c337..52ea9c0 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -8,7 +8,7 @@ name = "tracing"
# - README.md
# - Update CHANGELOG.md.
# - Create "v0.1.x" git tag
-version = "0.1.37"
+version = "0.1.40"
authors = ["Eliza Weisman <eliza@buoyant.io>", "Tokio Contributors <team@tokio.rs>"]
license = "MIT"
readme = "README.md"
@@ -25,17 +25,17 @@ categories = [
]
keywords = ["logging", "tracing", "metrics", "async"]
edition = "2018"
-rust-version = "1.49.0"
+rust-version = "1.56.0"
[dependencies]
-tracing-core = { path = "../tracing-core", version = "0.1.30", default-features = false }
+tracing-core = { path = "../tracing-core", version = "0.1.32", default-features = false }
log = { version = "0.4.17", optional = true }
-tracing-attributes = { path = "../tracing-attributes", version = "0.1.23", optional = true }
-cfg-if = "1.0.0"
+tracing-attributes = { path = "../tracing-attributes", version = "0.1.27", optional = true }
pin-project-lite = "0.2.9"
[dev-dependencies]
-criterion = { version = "0.3.6", default-features = false }
+criterion = { version = "0.3.6", default_features = false }
+futures = { version = "0.3.21", default_features = false }
log = "0.4.17"
tracing-mock = { path = "../tracing-mock" }
diff --git a/METADATA b/METADATA
index 6047baa..150b64d 100644
--- a/METADATA
+++ b/METADATA
@@ -1,19 +1,20 @@
+# This project was upgraded with external_updater.
+# Usage: tools/external_updater/updater.sh update external/rust/crates/tracing
+# For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md
+
name: "tracing"
description: "A scoped, structured logging and diagnostics system."
third_party {
- url {
- type: HOMEPAGE
- value: "https://crates.io/crates/tracing"
- }
- url {
- type: ARCHIVE
- value: "https://static.crates.io/crates/tracing/tracing-0.1.37.crate"
- }
- version: "0.1.37"
license_type: NOTICE
last_upgrade_date {
- year: 2023
- month: 3
- day: 3
+ year: 2024
+ month: 2
+ day: 6
+ }
+ homepage: "https://crates.io/crates/tracing"
+ identifier {
+ type: "Archive"
+ value: "https://static.crates.io/crates/tracing/tracing-0.1.40.crate"
+ version: "0.1.40"
}
}
diff --git a/README.md b/README.md
index 6947345..a42636f 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@ data as well as textual messages.
The `tracing` crate provides the APIs necessary for instrumenting libraries
and applications to emit trace data.
-*Compiler support: [requires `rustc` 1.49+][msrv]*
+*Compiler support: [requires `rustc` 1.56+][msrv]*
[msrv]: #supported-rust-versions
@@ -98,7 +98,7 @@ fn main() {
```toml
[dependencies]
tracing = "0.1"
-tracing-subscriber = "0.2.0"
+tracing-subscriber = "0.3.0"
```
This subscriber will be used as the default in all threads for the remainder of the duration
@@ -250,7 +250,7 @@ my_future
is as long as the future's.
The second, and preferred, option is through the
-[`#[instrument]`](https://docs.rs/tracing/0.1.37/tracing/attr.instrument.html)
+[`#[instrument]`](https://docs.rs/tracing/0.1.38/tracing/attr.instrument.html)
attribute:
```rust
@@ -297,7 +297,7 @@ span.in_scope(|| {
// Dropping the span will close it, indicating that it has ended.
```
-The [`#[instrument]`](https://docs.rs/tracing/0.1.37/tracing/attr.instrument.html) attribute macro
+The [`#[instrument]`](https://docs.rs/tracing/0.1.38/tracing/attr.instrument.html) attribute macro
can reduce some of this boilerplate:
```rust
@@ -379,6 +379,7 @@ maintained by the `tokio` project. These include:
- [`tracing-distributed`] Provides a generic implementation of a layer that reports traces spanning multiple machines to some backend.
- [`tracing-actix`] provides `tracing` integration for the `actix` actor
framework.
+- [`axum-insights`] provides `tracing` integration and Application insights export for the `axum` web framework.
- [`tracing-gelf`] implements a subscriber for exporting traces in Greylog
GELF format.
- [`tracing-coz`] provides integration with the [coz] causal profiler
@@ -407,6 +408,7 @@ please let us know! We'd love to add your project to the list!
[`tracing-distributed`]: https://crates.io/crates/tracing-distributed
[honeycomb.io]: https://www.honeycomb.io/
[`tracing-actix`]: https://crates.io/crates/tracing-actix
+[`axum-insights`]: https://crates.io/crates/axum-insights
[`tracing-gelf`]: https://crates.io/crates/tracing-gelf
[`tracing-coz`]: https://crates.io/crates/tracing-coz
[coz]: https://github.com/plasma-umass/coz
@@ -443,14 +445,14 @@ undergoing active development. They may be less stable than `tracing` and
## Supported Rust Versions
Tracing is built against the latest stable release. The minimum supported
-version is 1.49. The current Tracing version is not guaranteed to build on Rust
+version is 1.56. The current Tracing version is not guaranteed to build on Rust
versions earlier than the minimum supported version.
Tracing follows the same compiler support policies as the rest of the Tokio
project. The current stable Rust compiler and the three most recent minor
versions before it will always be supported. For example, if the current stable
-compiler version is 1.45, the minimum supported version will not be increased
-past 1.42, three minor versions prior. Increasing the minimum supported compiler
+compiler version is 1.69, the minimum supported version will not be increased
+past 1.66, three minor versions prior. Increasing the minimum supported compiler
version is not considered a semver breaking change as long as doing so complies
with this policy.
diff --git a/src/field.rs b/src/field.rs
index b3f9fbd..ea8e373 100644
--- a/src/field.rs
+++ b/src/field.rs
@@ -1,13 +1,13 @@
//! `Span` and `Event` key-value data.
//!
-//! Spans and events may be annotated with key-value data, referred to as known
-//! as _fields_. These fields consist of a mapping from a key (corresponding to
+//! Spans and events may be annotated with key-value data, referred to as _fields_.
+//! These fields consist of a mapping from a key (corresponding to
//! a `&str` but represented internally as an array index) to a [`Value`].
//!
//! # `Value`s and `Subscriber`s
//!
//! `Subscriber`s consume `Value`s as fields attached to [span]s or [`Event`]s.
-//! The set of field keys on a given span or is defined on its [`Metadata`].
+//! The set of field keys on a given span or event is defined on its [`Metadata`].
//! When a span is created, it provides [`Attributes`] to the `Subscriber`'s
//! [`new_span`] method, containing any fields whose values were provided when
//! the span was created; and may call the `Subscriber`'s [`record`] method
diff --git a/src/instrument.rs b/src/instrument.rs
index 46e5f57..87c7401 100644
--- a/src/instrument.rs
+++ b/src/instrument.rs
@@ -1,10 +1,14 @@
-use crate::stdlib::pin::Pin;
-use crate::stdlib::task::{Context, Poll};
-use crate::stdlib::{future::Future, marker::Sized};
use crate::{
dispatcher::{self, Dispatch},
span::Span,
};
+use core::{
+ future::Future,
+ marker::Sized,
+ mem::ManuallyDrop,
+ pin::Pin,
+ task::{Context, Poll},
+};
use pin_project_lite::pin_project;
/// Attaches spans to a [`std::future::Future`].
@@ -18,7 +22,7 @@ pub trait Instrument: Sized {
/// `Instrumented` wrapper.
///
/// The attached [`Span`] will be [entered] every time the instrumented
- /// [`Future`] is polled.
+ /// [`Future`] is polled or [`Drop`]ped.
///
/// # Examples
///
@@ -80,14 +84,17 @@ pub trait Instrument: Sized {
/// [disabled]: super::Span::is_disabled()
/// [`Future`]: std::future::Future
fn instrument(self, span: Span) -> Instrumented<Self> {
- Instrumented { inner: self, span }
+ Instrumented {
+ inner: ManuallyDrop::new(self),
+ span,
+ }
}
/// Instruments this type with the [current] [`Span`], returning an
/// `Instrumented` wrapper.
///
/// The attached [`Span`] will be [entered] every time the instrumented
- /// [`Future`] is polled.
+ /// [`Future`] is polled or [`Drop`]ped.
///
/// This can be used to propagate the current span when spawning a new future.
///
@@ -252,13 +259,55 @@ pin_project! {
///
/// [`Future`]: std::future::Future
/// [`Span`]: crate::Span
+ #[project = InstrumentedProj]
+ #[project_ref = InstrumentedProjRef]
#[derive(Debug, Clone)]
#[must_use = "futures do nothing unless you `.await` or poll them"]
pub struct Instrumented<T> {
+ // `ManuallyDrop` is used here to to enter instrument `Drop` by entering
+ // `Span` and executing `ManuallyDrop::drop`.
#[pin]
- inner: T,
+ inner: ManuallyDrop<T>,
span: Span,
}
+
+ impl<T> PinnedDrop for Instrumented<T> {
+ fn drop(this: Pin<&mut Self>) {
+ let this = this.project();
+ let _enter = this.span.enter();
+ // SAFETY: 1. `Pin::get_unchecked_mut()` is safe, because this isn't
+ // different from wrapping `T` in `Option` and calling
+ // `Pin::set(&mut this.inner, None)`, except avoiding
+ // additional memory overhead.
+ // 2. `ManuallyDrop::drop()` is safe, because
+ // `PinnedDrop::drop()` is guaranteed to be called only
+ // once.
+ unsafe { ManuallyDrop::drop(this.inner.get_unchecked_mut()) }
+ }
+ }
+}
+
+impl<'a, T> InstrumentedProj<'a, T> {
+ /// Get a mutable reference to the [`Span`] a pinned mutable reference to
+ /// the wrapped type.
+ fn span_and_inner_pin_mut(self) -> (&'a mut Span, Pin<&'a mut T>) {
+ // SAFETY: As long as `ManuallyDrop<T>` does not move, `T` won't move
+ // and `inner` is valid, because `ManuallyDrop::drop` is called
+ // only inside `Drop` of the `Instrumented`.
+ let inner = unsafe { self.inner.map_unchecked_mut(|v| &mut **v) };
+ (self.span, inner)
+ }
+}
+
+impl<'a, T> InstrumentedProjRef<'a, T> {
+ /// Get a reference to the [`Span`] a pinned reference to the wrapped type.
+ fn span_and_inner_pin_ref(self) -> (&'a Span, Pin<&'a T>) {
+ // SAFETY: As long as `ManuallyDrop<T>` does not move, `T` won't move
+ // and `inner` is valid, because `ManuallyDrop::drop` is called
+ // only inside `Drop` of the `Instrumented`.
+ let inner = unsafe { self.inner.map_unchecked(|v| &**v) };
+ (self.span, inner)
+ }
}
// === impl Instrumented ===
@@ -267,9 +316,9 @@ impl<T: Future> Future for Instrumented<T> {
type Output = T::Output;
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
- let this = self.project();
- let _enter = this.span.enter();
- this.inner.poll(cx)
+ let (span, inner) = self.project().span_and_inner_pin_mut();
+ let _enter = span.enter();
+ inner.poll(cx)
}
}
@@ -298,19 +347,29 @@ impl<T> Instrumented<T> {
/// Get a pinned reference to the wrapped type.
pub fn inner_pin_ref(self: Pin<&Self>) -> Pin<&T> {
- self.project_ref().inner
+ self.project_ref().span_and_inner_pin_ref().1
}
/// Get a pinned mutable reference to the wrapped type.
pub fn inner_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T> {
- self.project().inner
+ self.project().span_and_inner_pin_mut().1
}
/// Consumes the `Instrumented`, returning the wrapped type.
///
/// Note that this drops the span.
pub fn into_inner(self) -> T {
- self.inner
+ // To manually destructure `Instrumented` without `Drop`, we
+ // move it into a ManuallyDrop and use pointers to its fields
+ let this = ManuallyDrop::new(self);
+ let span: *const Span = &this.span;
+ let inner: *const ManuallyDrop<T> = &this.inner;
+ // SAFETY: Those pointers are valid for reads, because `Drop` didn't
+ // run, and properly aligned, because `Instrumented` isn't
+ // `#[repr(packed)]`.
+ let _span = unsafe { span.read() };
+ let inner = unsafe { inner.read() };
+ ManuallyDrop::into_inner(inner)
}
}
diff --git a/src/level_filters.rs b/src/level_filters.rs
index 44f5e5f..4e56ada 100644
--- a/src/level_filters.rs
+++ b/src/level_filters.rs
@@ -62,33 +62,37 @@ pub use tracing_core::{metadata::ParseLevelFilterError, LevelFilter};
/// `Span` constructors should compare the level against this value to
/// determine if those spans or events are enabled.
///
-/// [module-level documentation]: super#compile-time-filters
-pub const STATIC_MAX_LEVEL: LevelFilter = MAX_LEVEL;
+/// [module-level documentation]: self#compile-time-filters
+pub const STATIC_MAX_LEVEL: LevelFilter = get_max_level_inner();
-cfg_if::cfg_if! {
- if #[cfg(all(not(debug_assertions), feature = "release_max_level_off"))] {
- const MAX_LEVEL: LevelFilter = LevelFilter::OFF;
- } else if #[cfg(all(not(debug_assertions), feature = "release_max_level_error"))] {
- const MAX_LEVEL: LevelFilter = LevelFilter::ERROR;
- } else if #[cfg(all(not(debug_assertions), feature = "release_max_level_warn"))] {
- const MAX_LEVEL: LevelFilter = LevelFilter::WARN;
- } else if #[cfg(all(not(debug_assertions), feature = "release_max_level_info"))] {
- const MAX_LEVEL: LevelFilter = LevelFilter::INFO;
- } else if #[cfg(all(not(debug_assertions), feature = "release_max_level_debug"))] {
- const MAX_LEVEL: LevelFilter = LevelFilter::DEBUG;
- } else if #[cfg(all(not(debug_assertions), feature = "release_max_level_trace"))] {
- const MAX_LEVEL: LevelFilter = LevelFilter::TRACE;
- } else if #[cfg(feature = "max_level_off")] {
- const MAX_LEVEL: LevelFilter = LevelFilter::OFF;
- } else if #[cfg(feature = "max_level_error")] {
- const MAX_LEVEL: LevelFilter = LevelFilter::ERROR;
- } else if #[cfg(feature = "max_level_warn")] {
- const MAX_LEVEL: LevelFilter = LevelFilter::WARN;
- } else if #[cfg(feature = "max_level_info")] {
- const MAX_LEVEL: LevelFilter = LevelFilter::INFO;
- } else if #[cfg(feature = "max_level_debug")] {
- const MAX_LEVEL: LevelFilter = LevelFilter::DEBUG;
+const fn get_max_level_inner() -> LevelFilter {
+ if cfg!(not(debug_assertions)) {
+ if cfg!(feature = "release_max_level_off") {
+ LevelFilter::OFF
+ } else if cfg!(feature = "release_max_level_error") {
+ LevelFilter::ERROR
+ } else if cfg!(feature = "release_max_level_warn") {
+ LevelFilter::WARN
+ } else if cfg!(feature = "release_max_level_info") {
+ LevelFilter::INFO
+ } else if cfg!(feature = "release_max_level_debug") {
+ LevelFilter::DEBUG
+ } else {
+ // Same as branch cfg!(feature = "release_max_level_trace")
+ LevelFilter::TRACE
+ }
+ } else if cfg!(feature = "max_level_off") {
+ LevelFilter::OFF
+ } else if cfg!(feature = "max_level_error") {
+ LevelFilter::ERROR
+ } else if cfg!(feature = "max_level_warn") {
+ LevelFilter::WARN
+ } else if cfg!(feature = "max_level_info") {
+ LevelFilter::INFO
+ } else if cfg!(feature = "max_level_debug") {
+ LevelFilter::DEBUG
} else {
- const MAX_LEVEL: LevelFilter = LevelFilter::TRACE;
+ // Same as branch cfg!(feature = "max_level_trace")
+ LevelFilter::TRACE
}
}
diff --git a/src/lib.rs b/src/lib.rs
index 342e04a..258cbe5 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -19,7 +19,7 @@
//! The `tracing` crate provides the APIs necessary for instrumenting libraries
//! and applications to emit trace data.
//!
-//! *Compiler support: [requires `rustc` 1.49+][msrv]*
+//! *Compiler support: [requires `rustc` 1.56+][msrv]*
//!
//! [msrv]: #supported-rust-versions
//! # Core Concepts
@@ -192,7 +192,7 @@
//!
//! You can find more examples showing how to use this crate [here][examples].
//!
-//! [RAII]: https://github.com/rust-unofficial/patterns/blob/master/patterns/behavioural/RAII.md
+//! [RAII]: https://github.com/rust-unofficial/patterns/blob/main/src/patterns/behavioural/RAII.md
//! [examples]: https://github.com/tokio-rs/tracing/tree/master/examples
//!
//! ### Events
@@ -214,7 +214,7 @@
//! ### Configuring Attributes
//!
//! Both macros require a [`Level`] specifying the verbosity of the span or
-//! event. Optionally, the [target] and [parent span] may be overridden. If the
+//! event. Optionally, the, [target] and [parent span] may be overridden. If the
//! target and parent span are not overridden, they will default to the
//! module path where the macro was invoked and the current span (as determined
//! by the subscriber), respectively.
@@ -237,7 +237,16 @@
//! ```
//!
//! The span macros also take a string literal after the level, to set the name
-//! of the span.
+//! of the span (as above). In the case of the event macros, the name of the event can
+//! be overridden (the default is `event file:line`) using the `name:` specifier.
+//!
+//! ```
+//! # use tracing::{span, event, Level};
+//! # fn main() {
+//! span!(Level::TRACE, "my span");
+//! event!(name: "some_info", Level::INFO, "something has happened!");
+//! # }
+//! ```
//!
//! ### Recording Fields
//!
@@ -310,6 +319,19 @@
//! # }
//!```
//!
+//! Constant expressions can also be used as field names. Constants
+//! must be enclosed in curly braces (`{}`) to indicate that the *value*
+//! of the constant is to be used as the field name, rather than the
+//! constant's name. For example:
+//! ```
+//! # use tracing::{span, Level};
+//! # fn main() {
+//! const RESOURCE_NAME: &str = "foo";
+//! // this span will have the field `foo = "some_id"`
+//! span!(Level::TRACE, "get", { RESOURCE_NAME } = "some_id");
+//! # }
+//!```
+//!
//! The `?` sigil is shorthand that specifies a field should be recorded using
//! its [`fmt::Debug`] implementation:
//! ```
@@ -386,22 +408,6 @@
//! span.record("parting", &"goodbye world!");
//! ```
//!
-//! Note that a span may have up to 32 fields. The following will not compile:
-//!
-//! ```rust,compile_fail
-//! # use tracing::Level;
-//! # fn main() {
-//! let bad_span = span!(
-//! Level::TRACE,
-//! "too many fields!",
-//! a = 1, b = 2, c = 3, d = 4, e = 5, f = 6, g = 7, h = 8, i = 9,
-//! j = 10, k = 11, l = 12, m = 13, n = 14, o = 15, p = 16, q = 17,
-//! r = 18, s = 19, t = 20, u = 21, v = 22, w = 23, x = 24, y = 25,
-//! z = 26, aa = 27, bb = 28, cc = 29, dd = 30, ee = 31, ff = 32, gg = 33
-//! );
-//! # }
-//! ```
-//!
//! Finally, events may also include human-readable messages, in the form of a
//! [format string][fmt] and (optional) arguments, **after** the event's
//! key-value fields. If a format string and arguments are provided,
@@ -719,6 +725,7 @@
//! - [`tracing-actix-web`] provides `tracing` integration for the `actix-web` web framework.
//! - [`tracing-actix`] provides `tracing` integration for the `actix` actor
//! framework.
+//! - [`axum-insights`] provides `tracing` integration and Application insights export for the `axum` web framework.
//! - [`tracing-gelf`] implements a subscriber for exporting traces in Greylog
//! GELF format.
//! - [`tracing-coz`] provides integration with the [coz] causal profiler
@@ -747,6 +754,8 @@
//! - [`tracing-loki`] provides a layer for shipping logs to [Grafana Loki].
//! - [`tracing-logfmt`] provides a layer that formats events and spans into the logfmt format.
//! - [`reqwest-tracing`] provides a middleware to trace [`reqwest`] HTTP requests.
+//! - [`tracing-cloudwatch`] provides a layer that sends events to AWS CloudWatch Logs.
+//! - [`clippy-tracing`] provides a tool to add, remove and check for `tracing::instrument`.
//!
//! If you're the maintainer of a `tracing` ecosystem crate not listed above,
//! please let us know! We'd love to add your project to the list!
@@ -758,6 +767,7 @@
//! [honeycomb.io]: https://www.honeycomb.io/
//! [`tracing-actix-web`]: https://crates.io/crates/tracing-actix-web
//! [`tracing-actix`]: https://crates.io/crates/tracing-actix
+//! [`axum-insights`]: https://crates.io/crates/axum-insights
//! [`tracing-gelf`]: https://crates.io/crates/tracing-gelf
//! [`tracing-coz`]: https://crates.io/crates/tracing-coz
//! [coz]: https://github.com/plasma-umass/coz
@@ -776,7 +786,7 @@
//! [Tracy]: https://github.com/wolfpld/tracy
//! [`tracing-elastic-apm`]: https://crates.io/crates/tracing-elastic-apm
//! [Elastic APM]: https://www.elastic.co/apm
-//! [`tracing-etw`]: https://github.com/microsoft/tracing-etw
+//! [`tracing-etw`]: https://github.com/microsoft/rust_win_etw/tree/main/win_etw_tracing
//! [ETW]: https://docs.microsoft.com/en-us/windows/win32/etw/about-event-tracing
//! [`tracing-fluent-assertions`]: https://crates.io/crates/tracing-fluent-assertions
//! [`sentry-tracing`]: https://crates.io/crates/sentry-tracing
@@ -787,6 +797,8 @@
//! [`tracing-logfmt`]: https://crates.io/crates/tracing-logfmt
//! [`reqwest-tracing`]: https://crates.io/crates/reqwest-tracing
//! [`reqwest`]: https://crates.io/crates/reqwest
+//! [`tracing-cloudwatch`]: https://crates.io/crates/tracing-cloudwatch
+//! [`clippy-tracing`]: https://crates.io/crates/clippy-tracing
//!
//! <pre class="ignore" style="white-space:normal;font:inherit;">
//! <strong>Note</strong>: Some of these ecosystem crates are currently
@@ -817,7 +829,7 @@
//!
//! ```toml
//! [dependencies]
-//! tracing = { version = "0.1.37", default-features = false }
+//! tracing = { version = "0.1.38", default-features = false }
//! ```
//!
//! <pre class="ignore" style="white-space:normal;font:inherit;">
@@ -859,14 +871,14 @@
//! ## Supported Rust Versions
//!
//! Tracing is built against the latest stable release. The minimum supported
-//! version is 1.49. The current Tracing version is not guaranteed to build on
+//! version is 1.56. The current Tracing version is not guaranteed to build on
//! Rust versions earlier than the minimum supported version.
//!
//! Tracing follows the same compiler support policies as the rest of the Tokio
//! project. The current stable Rust compiler and the three most recent minor
//! versions before it will always be supported. For example, if the current
-//! stable compiler version is 1.45, the minimum supported version will not be
-//! increased past 1.42, three minor versions prior. Increasing the minimum
+//! stable compiler version is 1.69, the minimum supported version will not be
+//! increased past 1.66, three minor versions prior. Increasing the minimum
//! supported compiler version is not considered a semver breaking change as
//! long as doing so complies with this policy.
//!
@@ -900,7 +912,6 @@
//! [flags]: #crate-feature-flags
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg), deny(rustdoc::broken_intra_doc_links))]
-#![doc(html_root_url = "https://docs.rs/tracing/0.1.37")]
#![doc(
html_logo_url = "https://raw.githubusercontent.com/tokio-rs/tracing/master/assets/logo-type.png",
issue_tracker_base_url = "https://github.com/tokio-rs/tracing/issues/"
@@ -911,7 +922,6 @@
rust_2018_idioms,
unreachable_pub,
bad_style,
- const_err,
dead_code,
improper_ctypes,
non_shorthand_field_patterns,
diff --git a/src/macros.rs b/src/macros.rs
index f3968e5..dba49d1 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -24,7 +24,7 @@ macro_rules! span {
(target: $target:expr, parent: $parent:expr, $lvl:expr, $name:expr, $($fields:tt)*) => {
{
use $crate::__macro_support::Callsite as _;
- static CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
+ static __CALLSITE: $crate::__macro_support::MacroCallsite = $crate::callsite2! {
name: $name,
kind: $crate::metadata::Kind::SPAN,
target: $target,
@@ -33,10 +33,10 @@ macro_rules! span {
};
let mut interest = $crate::subscriber::Interest::never();
if $crate::level_enabled!($lvl)
- && { interest = CALLSITE.interest(); !interest.is_never() }
- && $crate::__macro_support::__is_enabled(CALLSITE.metadata(), interest)
+ && { interest = __CALLSITE.interest(); !interest.is_never() }
+ && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
{
- let meta = CALLSITE.metadata();
+ let meta = __CALLSITE.metadata();
// span with explicit parent
$crate::Span::child_of(
$parent,
@@ -44,9 +44,9 @@ macro_rules! span {
&$crate::valueset!(meta.fields(), $($fields)*),
)
} else {
- let span = $crate::__macro_support::__disabled_span(CALLSITE.metadata());
+ let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
$crate::if_log_enabled! { $lvl, {
- span.record_all(&$crate::valueset!(CALLSITE.metadata().fields(), $($fields)*));
+ span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
}};
span
}
@@ -55,7 +55,7 @@ macro_rules! span {
(target: $target:expr, $lvl:expr, $name:expr, $($fields:tt)*) => {
{
use $crate::__macro_support::Callsite as _;
- static CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
+ static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
name: $name,
kind: $crate::metadata::Kind::SPAN,
target: $target,
@@ -64,19 +64,19 @@ macro_rules! span {
};
let mut interest = $crate::subscriber::Interest::never();
if $crate::level_enabled!($lvl)
- && { interest = CALLSITE.interest(); !interest.is_never() }
- && $crate::__macro_support::__is_enabled(CALLSITE.metadata(), interest)
+ && { interest = __CALLSITE.interest(); !interest.is_never() }
+ && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
{
- let meta = CALLSITE.metadata();
+ let meta = __CALLSITE.metadata();
// span with contextual parent
$crate::Span::new(
meta,
&$crate::valueset!(meta.fields(), $($fields)*),
)
} else {
- let span = $crate::__macro_support::__disabled_span(CALLSITE.metadata());
+ let span = $crate::__macro_support::__disabled_span(__CALLSITE.metadata());
$crate::if_log_enabled! { $lvl, {
- span.record_all(&$crate::valueset!(CALLSITE.metadata().fields(), $($fields)*));
+ span.record_all(&$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
}};
span
}
@@ -564,6 +564,7 @@ macro_rules! error_span {
/// "App warning: {}",
/// error
/// );
+/// event!(name: "answer", Level::INFO, the_answer = data.0);
/// event!(Level::INFO, the_answer = data.0);
/// # }
/// ```
@@ -582,9 +583,115 @@ macro_rules! error_span {
// /// ```
#[macro_export]
macro_rules! event {
+ // Name / target / parent.
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* } )=> ({
+ use $crate::__macro_support::Callsite as _;
+ static __CALLSITE: $crate::__macro_support::MacroCallsite = $crate::callsite2! {
+ name: $name,
+ kind: $crate::metadata::Kind::EVENT,
+ target: $target,
+ level: $lvl,
+ fields: $($fields)*
+ };
+
+ let enabled = $crate::level_enabled!($lvl) && {
+ let interest = __CALLSITE.interest();
+ !interest.is_never() && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
+ };
+ if enabled {
+ (|value_set: $crate::field::ValueSet| {
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &value_set
+ );
+ let meta = __CALLSITE.metadata();
+ // event with explicit parent
+ $crate::Event::child_of(
+ $parent,
+ meta,
+ &value_set
+ );
+ })($crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
+ } else {
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*)
+ );
+ }
+ });
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
+ $crate::event!(
+ name: $name,
+ target: $target,
+ parent: $parent,
+ $lvl,
+ { message = ::core::format_args!($($arg)+), $($fields)* }
+ )
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $lvl, { $($k).+ = $($fields)* })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $lvl:expr, $($arg:tt)+) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $lvl, { $($arg)+ })
+ );
+
+ // Name / target.
+ (name: $name:expr, target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
+ use $crate::__macro_support::Callsite as _;
+ static __CALLSITE: $crate::__macro_support::MacroCallsite = $crate::callsite2! {
+ name: $name,
+ kind: $crate::metadata::Kind::EVENT,
+ target: $target,
+ level: $lvl,
+ fields: $($fields)*
+ };
+ let enabled = $crate::level_enabled!($lvl) && {
+ let interest = __CALLSITE.interest();
+ !interest.is_never() && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
+ };
+ if enabled {
+ (|value_set: $crate::field::ValueSet| {
+ let meta = __CALLSITE.metadata();
+ // event with contextual parent
+ $crate::Event::dispatch(
+ meta,
+ &value_set
+ );
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &value_set
+ );
+ })($crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
+ } else {
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*)
+ );
+ }
+ });
+ (name: $name:expr, target: $target:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
+ $crate::event!(
+ name: $name,
+ target: $target,
+ $lvl,
+ { message = ::core::format_args!($($arg)+), $($fields)* }
+ )
+ );
+ (name: $name:expr, target: $target:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
+ $crate::event!(name: $name, target: $target, $lvl, { $($k).+ = $($fields)* })
+ );
+ (name: $name:expr, target: $target:expr, $lvl:expr, $($arg:tt)+) => (
+ $crate::event!(name: $name, target: $target, $lvl, { $($arg)+ })
+ );
+
+ // Target / parent.
(target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* } )=> ({
use $crate::__macro_support::Callsite as _;
- static CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
+ static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
name: $crate::__macro_support::concat!(
"event ",
file!(),
@@ -598,39 +705,38 @@ macro_rules! event {
};
let enabled = $crate::level_enabled!($lvl) && {
- let interest = CALLSITE.interest();
- !interest.is_never() && $crate::__macro_support::__is_enabled(CALLSITE.metadata(), interest)
+ let interest = __CALLSITE.interest();
+ !interest.is_never() && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
};
if enabled {
(|value_set: $crate::field::ValueSet| {
$crate::__tracing_log!(
$lvl,
- CALLSITE,
+ __CALLSITE,
&value_set
);
- let meta = CALLSITE.metadata();
+ let meta = __CALLSITE.metadata();
// event with explicit parent
$crate::Event::child_of(
$parent,
meta,
&value_set
);
- })($crate::valueset!(CALLSITE.metadata().fields(), $($fields)*));
+ })($crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
} else {
$crate::__tracing_log!(
$lvl,
- CALLSITE,
- &$crate::valueset!(CALLSITE.metadata().fields(), $($fields)*)
+ __CALLSITE,
+ &$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*)
);
}
});
-
(target: $target:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
$crate::event!(
target: $target,
parent: $parent,
$lvl,
- { message = format_args!($($arg)+), $($fields)* }
+ { message = ::core::format_args!($($arg)+), $($fields)* }
)
);
(target: $target:expr, parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
@@ -639,9 +745,114 @@ macro_rules! event {
(target: $target:expr, parent: $parent:expr, $lvl:expr, $($arg:tt)+) => (
$crate::event!(target: $target, parent: $parent, $lvl, { $($arg)+ })
);
+
+ // Name / parent.
+ (name: $name:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* } )=> ({
+ use $crate::__macro_support::Callsite as _;
+ static __CALLSITE: $crate::__macro_support::MacroCallsite = $crate::callsite2! {
+ name: $name,
+ kind: $crate::metadata::Kind::EVENT,
+ target: module_path!(),
+ level: $lvl,
+ fields: $($fields)*
+ };
+
+ let enabled = $crate::level_enabled!($lvl) && {
+ let interest = __CALLSITE.interest();
+ !interest.is_never() && __CALLSITE.is_enabled(interest)
+ };
+ if enabled {
+ (|value_set: $crate::field::ValueSet| {
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &value_set
+ );
+ let meta = __CALLSITE.metadata();
+ // event with explicit parent
+ $crate::Event::child_of(
+ $parent,
+ meta,
+ &value_set
+ );
+ })($crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
+ } else {
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*)
+ );
+ }
+ });
+ (name: $name:expr, parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
+ $crate::event!(
+ name: $name,
+ parent: $parent,
+ $lvl,
+ { message = ::core::format_args!($($arg)+), $($fields)* }
+ )
+ );
+ (name: $name:expr, parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
+ $crate::event!(name: $name, parent: $parent, $lvl, { $($k).+ = $($fields)* })
+ );
+ (name: $name:expr, parent: $parent:expr, $lvl:expr, $($arg:tt)+) => (
+ $crate::event!(name: $name, parent: $parent, $lvl, { $($arg)+ })
+ );
+
+ // Name.
+ (name: $name:expr, $lvl:expr, { $($fields:tt)* } )=> ({
+ use $crate::__macro_support::Callsite as _;
+ static __CALLSITE: $crate::__macro_support::MacroCallsite = $crate::callsite2! {
+ name: $name,
+ kind: $crate::metadata::Kind::EVENT,
+ target: module_path!(),
+ level: $lvl,
+ fields: $($fields)*
+ };
+ let enabled = $crate::level_enabled!($lvl) && {
+ let interest = __CALLSITE.interest();
+ !interest.is_never() && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
+ };
+ if enabled {
+ (|value_set: $crate::field::ValueSet| {
+ let meta = __CALLSITE.metadata();
+ // event with contextual parent
+ $crate::Event::dispatch(
+ meta,
+ &value_set
+ );
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &value_set
+ );
+ })($crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
+ } else {
+ $crate::__tracing_log!(
+ $lvl,
+ __CALLSITE,
+ &$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*)
+ );
+ }
+ });
+ (name: $name:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
+ $crate::event!(
+ name: $name,
+ $lvl,
+ { message = ::core::format_args!($($arg)+), $($fields)* }
+ )
+ );
+ (name: $name:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
+ $crate::event!(name: $name, $lvl, { $($k).+ = $($fields)* })
+ );
+ (name: $name:expr, $lvl:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, $lvl, { $($arg)+ })
+ );
+
+ // Target.
(target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
use $crate::__macro_support::Callsite as _;
- static CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
+ static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
name: $crate::__macro_support::concat!(
"event ",
file!(),
@@ -654,12 +865,12 @@ macro_rules! event {
fields: $($fields)*
};
let enabled = $crate::level_enabled!($lvl) && {
- let interest = CALLSITE.interest();
- !interest.is_never() && $crate::__macro_support::__is_enabled(CALLSITE.metadata(), interest)
+ let interest = __CALLSITE.interest();
+ !interest.is_never() && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest)
};
if enabled {
(|value_set: $crate::field::ValueSet| {
- let meta = CALLSITE.metadata();
+ let meta = __CALLSITE.metadata();
// event with contextual parent
$crate::Event::dispatch(
meta,
@@ -667,15 +878,15 @@ macro_rules! event {
);
$crate::__tracing_log!(
$lvl,
- CALLSITE,
+ __CALLSITE,
&value_set
);
- })($crate::valueset!(CALLSITE.metadata().fields(), $($fields)*));
+ })($crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*));
} else {
$crate::__tracing_log!(
$lvl,
- CALLSITE,
- &$crate::valueset!(CALLSITE.metadata().fields(), $($fields)*)
+ __CALLSITE,
+ &$crate::valueset!(__CALLSITE.metadata().fields(), $($fields)*)
);
}
});
@@ -683,7 +894,7 @@ macro_rules! event {
$crate::event!(
target: $target,
$lvl,
- { message = format_args!($($arg)+), $($fields)* }
+ { message = ::core::format_args!($($arg)+), $($fields)* }
)
);
(target: $target:expr, $lvl:expr, $($k:ident).+ = $($fields:tt)* ) => (
@@ -692,12 +903,14 @@ macro_rules! event {
(target: $target:expr, $lvl:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, $lvl, { $($arg)+ })
);
+
+ // Parent.
(parent: $parent:expr, $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
parent: $parent,
$lvl,
- { message = format_args!($($arg)+), $($fields)* }
+ { message = ::core::format_args!($($arg)+), $($fields)* }
)
);
(parent: $parent:expr, $lvl:expr, $($k:ident).+ = $($field:tt)*) => (
@@ -751,11 +964,13 @@ macro_rules! event {
(parent: $parent:expr, $lvl:expr, $($arg:tt)+ ) => (
$crate::event!(target: module_path!(), parent: $parent, $lvl, { $($arg)+ })
);
+
+ // ...
( $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
$lvl,
- { message = format_args!($($arg)+), $($fields)* }
+ { message = ::core::format_args!($($arg)+), $($fields)* }
)
);
( $lvl:expr, { $($fields:tt)* }, $($arg:tt)+ ) => (
@@ -970,7 +1185,7 @@ macro_rules! enabled {
(kind: $kind:expr, target: $target:expr, $lvl:expr, { $($fields:tt)* } )=> ({
if $crate::level_enabled!($lvl) {
use $crate::__macro_support::Callsite as _;
- static CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
+ static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite2! {
name: $crate::__macro_support::concat!(
"enabled ",
file!(),
@@ -982,9 +1197,9 @@ macro_rules! enabled {
level: $lvl,
fields: $($fields)*
};
- let interest = CALLSITE.interest();
- if !interest.is_never() && $crate::__macro_support::__is_enabled(CALLSITE.metadata(), interest) {
- let meta = CALLSITE.metadata();
+ let interest = __CALLSITE.interest();
+ if !interest.is_never() && $crate::__macro_support::__is_enabled(__CALLSITE.metadata(), interest) {
+ let meta = __CALLSITE.metadata();
$crate::dispatcher::get_default(|current| current.enabled(meta))
} else {
false
@@ -1081,10 +1296,46 @@ macro_rules! enabled {
/// if pos.x >= 0.0 { "positive" } else { "negative" },
/// if pos.y >= 0.0 { "positive" } else { "negative" }
/// );
+/// trace!(name: "completed", position = ?pos);
/// # }
/// ```
#[macro_export]
macro_rules! trace {
+ // Name / target / parent.
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::TRACE, {}, $($arg)+)
+ );
+
+ // Name / target.
+ (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::TRACE, {}, $($arg)+)
+ );
+
+ // Target / parent.
(target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, { $($field)* }, $($arg)*)
);
@@ -1100,6 +1351,59 @@ macro_rules! trace {
(target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::TRACE, {}, $($arg)+)
);
+
+ // Name / parent.
+ (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::TRACE, {}, $($arg)+)
+ );
+
+ // Name.
+ (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::TRACE, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::TRACE, { $($k).+ $($field)* })
+ );
+ (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::TRACE, { ?$($k).+ $($field)* })
+ );
+ (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::TRACE, { %$($k).+ $($field)* })
+ );
+ (name: $name:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, $crate::Level::TRACE, {}, $($arg)+)
+ );
+
+ // Target.
+ (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::TRACE, { $($field)* }, $($arg)*)
+ );
+ (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::TRACE, { $($k).+ $($field)* })
+ );
+ (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::TRACE, { ?$($k).+ $($field)* })
+ );
+ (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::TRACE, { %$($k).+ $($field)* })
+ );
+ (target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(target: $target, $crate::Level::TRACE, {}, $($arg)+)
+ );
+
+ // Parent.
(parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1166,21 +1470,8 @@ macro_rules! trace {
$($arg)+
)
);
- (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::TRACE, { $($field)* }, $($arg)*)
- );
- (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::TRACE, { $($k).+ $($field)* })
- );
- (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::TRACE, { ?$($k).+ $($field)* })
- );
- (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::TRACE, { %$($k).+ $($field)* })
- );
- (target: $target:expr, $($arg:tt)+ ) => (
- $crate::event!(target: $target, $crate::Level::TRACE, {}, $($arg)+)
- );
+
+ // ...
({ $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1196,6 +1487,20 @@ macro_rules! trace {
{ $($k).+ = $($field)*}
)
);
+ (?$($k:ident).+ = $($field:tt)*) => (
+ $crate::event!(
+ target: module_path!(),
+ $crate::Level::TRACE,
+ { ?$($k).+ = $($field)*}
+ )
+ );
+ (%$($k:ident).+ = $($field:tt)*) => (
+ $crate::event!(
+ target: module_path!(),
+ $crate::Level::TRACE,
+ { %$($k).+ = $($field)*}
+ )
+ );
($($k:ident).+, $($field:tt)*) => (
$crate::event!(
target: module_path!(),
@@ -1268,10 +1573,46 @@ macro_rules! trace {
///
/// debug!(?pos.x, ?pos.y);
/// debug!(target: "app_events", position = ?pos, "New position");
+/// debug!(name: "completed", position = ?pos);
/// # }
/// ```
#[macro_export]
macro_rules! debug {
+ // Name / target / parent.
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::DEBUG, {}, $($arg)+)
+ );
+
+ // Name / target.
+ (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::DEBUG, {}, $($arg)+)
+ );
+
+ // Target / parent.
(target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
);
@@ -1287,6 +1628,59 @@ macro_rules! debug {
(target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::DEBUG, {}, $($arg)+)
);
+
+ // Name / parent.
+ (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::DEBUG, {}, $($arg)+)
+ );
+
+ // Name.
+ (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::DEBUG, { $($k).+ $($field)* })
+ );
+ (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
+ );
+ (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::DEBUG, { %$($k).+ $($field)* })
+ );
+ (name: $name:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, $crate::Level::DEBUG, {}, $($arg)+)
+ );
+
+ // Target.
+ (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
+ );
+ (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::DEBUG, { $($k).+ $($field)* })
+ );
+ (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
+ );
+ (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::DEBUG, { %$($k).+ $($field)* })
+ );
+ (target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(target: $target, $crate::Level::DEBUG, {}, $($arg)+)
+ );
+
+ // Parent.
(parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1353,21 +1747,8 @@ macro_rules! debug {
$($arg)+
)
);
- (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::DEBUG, { $($field)* }, $($arg)*)
- );
- (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::DEBUG, { $($k).+ $($field)* })
- );
- (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::DEBUG, { ?$($k).+ $($field)* })
- );
- (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::DEBUG, { %$($k).+ $($field)* })
- );
- (target: $target:expr, $($arg:tt)+ ) => (
- $crate::event!(target: $target, $crate::Level::DEBUG, {}, $($arg)+)
- );
+
+ // ...
({ $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1480,11 +1861,47 @@ macro_rules! debug {
/// conn.port,
/// ?conn.speed,
/// );
+/// info!(name: "completed", "completed connection to {:?}", addr);
/// # }
/// ```
#[macro_export]
macro_rules! info {
- (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ // Name / target / parent.
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::INFO, {}, $($arg)+)
+ );
+
+ // Name / target.
+ (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::INFO, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::INFO, {}, $($arg)+)
+ );
+
+ // Target / parent.
+ (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::INFO, { $($field)* }, $($arg)*)
);
(target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
@@ -1499,6 +1916,59 @@ macro_rules! info {
(target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::INFO, {}, $($arg)+)
);
+
+ // Name / parent.
+ (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::INFO, {}, $($arg)+)
+ );
+
+ // Name.
+ (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::INFO, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::INFO, { $($k).+ $($field)* })
+ );
+ (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::INFO, { ?$($k).+ $($field)* })
+ );
+ (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::INFO, { %$($k).+ $($field)* })
+ );
+ (name: $name:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, $crate::Level::INFO, {}, $($arg)+)
+ );
+
+ // Target.
+ (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::INFO, { $($field)* }, $($arg)*)
+ );
+ (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::INFO, { $($k).+ $($field)* })
+ );
+ (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::INFO, { ?$($k).+ $($field)* })
+ );
+ (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::INFO, { %$($k).+ $($field)* })
+ );
+ (target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(target: $target, $crate::Level::INFO, {}, $($arg)+)
+ );
+
+ // Parent.
(parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1565,21 +2035,8 @@ macro_rules! info {
$($arg)+
)
);
- (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::INFO, { $($field)* }, $($arg)*)
- );
- (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::INFO, { $($k).+ $($field)* })
- );
- (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::INFO, { ?$($k).+ $($field)* })
- );
- (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::INFO, { $($k).+ $($field)* })
- );
- (target: $target:expr, $($arg:tt)+ ) => (
- $crate::event!(target: $target, $crate::Level::INFO, {}, $($arg)+)
- );
+
+ // ...
({ $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1685,11 +2142,47 @@ macro_rules! info {
/// warning = warn_description,
/// "Received warning for input: {:?}", input,
/// );
+/// warn!(name: "invalid", ?input);
/// # }
/// ```
#[macro_export]
macro_rules! warn {
- (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ // Name / target / parent.
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::WARN, {}, $($arg)+)
+ );
+
+ // Name / target.
+ (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::WARN, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::WARN, {}, $($arg)+)
+ );
+
+ // Target / parent.
+ (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::WARN, { $($field)* }, $($arg)*)
);
(target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
@@ -1704,6 +2197,59 @@ macro_rules! warn {
(target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::WARN, {}, $($arg)+)
);
+
+ // Name / parent.
+ (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::WARN, {}, $($arg)+)
+ );
+
+ // Name.
+ (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::WARN, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::WARN, { $($k).+ $($field)* })
+ );
+ (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::WARN, { ?$($k).+ $($field)* })
+ );
+ (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::WARN, { %$($k).+ $($field)* })
+ );
+ (name: $name:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, $crate::Level::WARN, {}, $($arg)+)
+ );
+
+ // Target.
+ (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::WARN, { $($field)* }, $($arg)*)
+ );
+ (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::WARN, { $($k).+ $($field)* })
+ );
+ (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::WARN, { ?$($k).+ $($field)* })
+ );
+ (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::WARN, { %$($k).+ $($field)* })
+ );
+ (target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(target: $target, $crate::Level::WARN, {}, $($arg)+)
+ );
+
+ // Parent.
(parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1770,21 +2316,8 @@ macro_rules! warn {
$($arg)+
)
);
- (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::WARN, { $($field)* }, $($arg)*)
- );
- (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::WARN, { $($k).+ $($field)* })
- );
- (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::WARN, { ?$($k).+ $($field)* })
- );
- (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::WARN, { %$($k).+ $($field)* })
- );
- (target: $target:expr, $($arg:tt)+ ) => (
- $crate::event!(target: $target, $crate::Level::WARN, {}, $($arg)+)
- );
+
+ // ...
({ $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1886,11 +2419,47 @@ macro_rules! warn {
/// error!(port, error = %err_info);
/// error!(target: "app_events", "App Error: {}", err_info);
/// error!({ info = err_info }, "error on port: {}", port);
+/// error!(name: "invalid_input", "Invalid input: {}", err_info);
/// # }
/// ```
#[macro_export]
macro_rules! error {
- (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ // Name / target / parent.
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, parent: $parent, $crate::Level::ERROR, {}, $($arg)+)
+ );
+
+ // Name / target.
+ (name: $name:expr, target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, target: $target:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, target: $target, $crate::Level::ERROR, {}, $($arg)+)
+ );
+
+ // Target / parent.
+ (target: $target:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, { $($field)* }, $($arg)*)
);
(target: $target:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
@@ -1905,6 +2474,59 @@ macro_rules! error {
(target: $target:expr, parent: $parent:expr, $($arg:tt)+ ) => (
$crate::event!(target: $target, parent: $parent, $crate::Level::ERROR, {}, $($arg)+)
);
+
+ // Name / parent.
+ (name: $name:expr, parent: $parent:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, parent: $parent:expr, $($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, ?$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, %$($k:ident).+ $($field:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, { $($k).+ $($field)+ })
+ );
+ (name: $name:expr, parent: $parent:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, parent: $parent, $crate::Level::ERROR, {}, $($arg)+)
+ );
+
+ // Name.
+ (name: $name:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::ERROR, { $($field)* }, $($arg)*)
+ );
+ (name: $name:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::ERROR, { $($k).+ $($field)* })
+ );
+ (name: $name:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::ERROR, { ?$($k).+ $($field)* })
+ );
+ (name: $name:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(name: $name, $crate::Level::ERROR, { %$($k).+ $($field)* })
+ );
+ (name: $name:expr, $($arg:tt)+ ) => (
+ $crate::event!(name: $name, $crate::Level::ERROR, {}, $($arg)+)
+ );
+
+ // Target.
+ (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::ERROR, { $($field)* }, $($arg)*)
+ );
+ (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::ERROR, { $($k).+ $($field)* })
+ );
+ (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::ERROR, { ?$($k).+ $($field)* })
+ );
+ (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
+ $crate::event!(target: $target, $crate::Level::ERROR, { %$($k).+ $($field)* })
+ );
+ (target: $target:expr, $($arg:tt)+ ) => (
+ $crate::event!(target: $target, $crate::Level::ERROR, {}, $($arg)+)
+ );
+
+ // Parent.
(parent: $parent:expr, { $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -1971,21 +2593,8 @@ macro_rules! error {
$($arg)+
)
);
- (target: $target:expr, { $($field:tt)* }, $($arg:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::ERROR, { $($field)* }, $($arg)*)
- );
- (target: $target:expr, $($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::ERROR, { $($k).+ $($field)* })
- );
- (target: $target:expr, ?$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::ERROR, { ?$($k).+ $($field)* })
- );
- (target: $target:expr, %$($k:ident).+ $($field:tt)* ) => (
- $crate::event!(target: $target, $crate::Level::ERROR, { %$($k).+ $($field)* })
- );
- (target: $target:expr, $($arg:tt)+ ) => (
- $crate::event!(target: $target, $crate::Level::ERROR, {}, $($arg)+)
- );
+
+ // ...
({ $($field:tt)+ }, $($arg:tt)+ ) => (
$crate::event!(
target: module_path!(),
@@ -2107,13 +2716,13 @@ macro_rules! callsite {
target: $target,
level: $lvl,
fields: $crate::fieldset!( $($fields)* ),
- callsite: &CALLSITE,
+ callsite: &__CALLSITE,
kind: $kind,
}
};
- static CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite::DefaultCallsite::new(&META);
- CALLSITE.register();
- &CALLSITE
+ static __CALLSITE: $crate::callsite::DefaultCallsite = $crate::callsite::DefaultCallsite::new(&META);
+ __CALLSITE.register();
+ &__CALLSITE
}};
}
@@ -2157,7 +2766,7 @@ macro_rules! callsite2 {
target: $target,
level: $lvl,
fields: $crate::fieldset!( $($fields)* ),
- callsite: &CALLSITE,
+ callsite: &__CALLSITE,
kind: $kind,
}
};
@@ -2193,79 +2802,79 @@ macro_rules! valueset {
// };
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = ?$val:expr, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&debug(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&debug(&$val) as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = %$val:expr, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&display(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&display(&$val) as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = $val:expr, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&$val as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&$val as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&$($k).+ as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&$($k).+ as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, ?$($k:ident).+, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&debug(&$($k).+) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&debug(&$($k).+) as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, %$($k:ident).+, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&display(&$($k).+) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&display(&$($k).+) as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = ?$val:expr) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&debug(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&debug(&$val) as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = %$val:expr) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&display(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&display(&$val) as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+ = $val:expr) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&$val as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&$val as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $($k:ident).+) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&$($k).+ as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&$($k).+ as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, ?$($k:ident).+) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&debug(&$($k).+) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&debug(&$($k).+) as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, %$($k:ident).+) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&display(&$($k).+) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&display(&$($k).+) as &dyn Value)) },
$next,
)
};
@@ -2273,47 +2882,88 @@ macro_rules! valueset {
// Handle literal names
(@ { $(,)* $($out:expr),* }, $next:expr, $k:literal = ?$val:expr, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&debug(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&debug(&$val) as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $k:literal = %$val:expr, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&display(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&display(&$val) as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $k:literal = $val:expr, $($rest:tt)*) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&$val as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&$val as &dyn Value)) },
$next,
$($rest)*
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $k:literal = ?$val:expr) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&debug(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&debug(&$val) as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $k:literal = %$val:expr) => {
$crate::valueset!(
- @ { $($out),*, (&$next, Some(&display(&$val) as &dyn Value)) },
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&display(&$val) as &dyn Value)) },
$next,
)
};
(@ { $(,)* $($out:expr),* }, $next:expr, $k:literal = $val:expr) => {
$crate::valueset!(
+ @ { $($out),*, (&$next, ::core::option::Option::Some(&$val as &dyn Value)) },
+ $next,
+ )
+ };
+
+ // Handle constant names
+ (@ { $(,)* $($out:expr),* }, $next:expr, { $k:expr } = ?$val:expr, $($rest:tt)*) => {
+ $crate::valueset!(
+ @ { $($out),*, (&$next, Some(&debug(&$val) as &dyn Value)) },
+ $next,
+ $($rest)*
+ )
+ };
+ (@ { $(,)* $($out:expr),* }, $next:expr, { $k:expr } = %$val:expr, $($rest:tt)*) => {
+ $crate::valueset!(
+ @ { $($out),*, (&$next, Some(&display(&$val) as &dyn Value)) },
+ $next,
+ $($rest)*
+ )
+ };
+ (@ { $(,)* $($out:expr),* }, $next:expr, { $k:expr } = $val:expr, $($rest:tt)*) => {
+ $crate::valueset!(
+ @ { $($out),*, (&$next, Some(&$val as &dyn Value)) },
+ $next,
+ $($rest)*
+ )
+ };
+ (@ { $(,)* $($out:expr),* }, $next:expr, { $k:expr } = ?$val:expr) => {
+ $crate::valueset!(
+ @ { $($out),*, (&$next, Some(&debug(&$val) as &dyn Value)) },
+ $next,
+ )
+ };
+ (@ { $(,)* $($out:expr),* }, $next:expr, { $k:expr } = %$val:expr) => {
+ $crate::valueset!(
+ @ { $($out),*, (&$next, Some(&display(&$val) as &dyn Value)) },
+ $next,
+ )
+ };
+ (@ { $(,)* $($out:expr),* }, $next:expr, { $k:expr } = $val:expr) => {
+ $crate::valueset!(
@ { $($out),*, (&$next, Some(&$val as &dyn Value)) },
$next,
)
};
- // Remainder is unparseable, but exists --- must be format args!
+ // Remainder is unparsable, but exists --- must be format args!
(@ { $(,)* $($out:expr),* }, $next:expr, $($rest:tt)+) => {
- $crate::valueset!(@ { (&$next, Some(&format_args!($($rest)+) as &dyn Value)), $($out),* }, $next, )
+ $crate::valueset!(@ { (&$next, ::core::option::Option::Some(&::core::format_args!($($rest)+) as &dyn Value)), $($out),* }, $next, )
};
// === entry ===
@@ -2324,7 +2974,7 @@ macro_rules! valueset {
let mut iter = $fields.iter();
$fields.value_set($crate::valueset!(
@ { },
- iter.next().expect("FieldSet corrupted (this is a bug)"),
+ ::core::iter::Iterator::next(&mut iter).expect("FieldSet corrupted (this is a bug)"),
$($kvs)+
))
}
@@ -2380,6 +3030,17 @@ macro_rules! fieldset {
$crate::fieldset!(@ { $($out),*, $k } $($rest)*)
};
+ // Handle constant names
+ (@ { $(,)* $($out:expr),* } { $k:expr } = ?$val:expr, $($rest:tt)*) => {
+ $crate::fieldset!(@ { $($out),*, $k } $($rest)*)
+ };
+ (@ { $(,)* $($out:expr),* } { $k:expr } = %$val:expr, $($rest:tt)*) => {
+ $crate::fieldset!(@ { $($out),*, $k } $($rest)*)
+ };
+ (@ { $(,)* $($out:expr),* } { $k:expr } = $val:expr, $($rest:tt)*) => {
+ $crate::fieldset!(@ { $($out),*, $k } $($rest)*)
+ };
+
// Remainder is unparseable, but exists --- must be format args!
(@ { $(,)* $($out:expr),* } $($rest:tt)+) => {
$crate::fieldset!(@ { "message", $($out),*, })
diff --git a/src/span.rs b/src/span.rs
index 58822f4..3c235dc 100644
--- a/src/span.rs
+++ b/src/span.rs
@@ -22,7 +22,7 @@
//! override their default values.
//! - The span's [verbosity level]
//! - A string literal providing the span's name.
-//! - Finally, between zero and 32 arbitrary key/value fields.
+//! - Finally, zero or more arbitrary key/value fields.
//!
//! [`target`]: super::Metadata::target
//!
@@ -824,7 +824,7 @@ impl Span {
///
/// <pre class="ignore" style="white-space:normal;font:inherit;">
/// <strong>Note</strong>: The returned <a href="../struct.EnteredSpan.html">
- /// <code>EnteredSpan</a></code> guard does not implement <code>Send</code>.
+ /// <code>EnteredSpan</code></a> guard does not implement <code>Send</code>.
/// Dropping the guard will exit <em>this</em> span, and if the guard is sent
/// to another thread and dropped there, that thread may never have entered
/// this span. Thus, <code>EnteredSpan</code>s should not be sent between threads.
@@ -1617,7 +1617,7 @@ mod test {
#[test]
fn test_record_backwards_compat() {
- Span::current().record("some-key", &"some text");
- Span::current().record("some-key", &false);
+ Span::current().record("some-key", "some text");
+ Span::current().record("some-key", false);
}
}
diff --git a/tests/enabled.rs b/tests/enabled.rs
index ea1c698..5a45963 100644
--- a/tests/enabled.rs
+++ b/tests/enabled.rs
@@ -13,7 +13,7 @@ fn level_and_target() {
meta.level() <= &Level::INFO
}
})
- .done()
+ .only()
.run();
let _guard = tracing::subscriber::set_default(subscriber);
@@ -38,7 +38,7 @@ fn span_and_event() {
meta.level() <= &Level::INFO
}
})
- .done()
+ .only()
.run();
let _guard = tracing::subscriber::set_default(subscriber);
diff --git a/tests/event.rs b/tests/event.rs
index 61df19a..0be7c0b 100644
--- a/tests/event.rs
+++ b/tests/event.rs
@@ -22,17 +22,17 @@ macro_rules! event_without_message {
fn $name() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("answer")
+ expect::event().with_fields(
+ expect::field("answer")
.with_value(&42)
.and(
- field::mock("to_question")
+ expect::field("to_question")
.with_value(&"life, the universe, and everything"),
)
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -57,15 +57,19 @@ event_without_message! {nonzeroi32_event_without_message: std::num::NonZeroI32::
#[test]
fn event_with_message() {
let (subscriber, handle) = subscriber::mock()
- .event(event::msg(format_args!(
- "hello from my event! yak shaved = {:?}",
- true
- )))
- .done()
+ .event(
+ expect::event().with_fields(expect::field("message").with_value(
+ &tracing::field::debug(format_args!(
+ "hello from my tracing::event! yak shaved = {:?}",
+ true
+ )),
+ )),
+ )
+ .only()
.run_with_handle();
with_default(subscriber, || {
- debug!("hello from my event! yak shaved = {:?}", true);
+ debug!("hello from my tracing::event! yak shaved = {:?}", true);
});
handle.assert_finished();
@@ -76,10 +80,12 @@ fn event_with_message() {
fn message_without_delims() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("answer")
+ expect::event().with_fields(
+ expect::field("answer")
.with_value(&42)
- .and(field::mock("question").with_value(&"life, the universe, and everything"))
+ .and(
+ expect::field("question").with_value(&"life, the universe, and everything"),
+ )
.and(field::msg(format_args!(
"hello from my event! tricky? {:?}!",
true
@@ -87,7 +93,7 @@ fn message_without_delims() {
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -103,15 +109,17 @@ fn message_without_delims() {
fn string_message_without_delims() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("answer")
+ expect::event().with_fields(
+ expect::field("answer")
.with_value(&42)
- .and(field::mock("question").with_value(&"life, the universe, and everything"))
+ .and(
+ expect::field("question").with_value(&"life, the universe, and everything"),
+ )
.and(field::msg(format_args!("hello from my event")))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -127,23 +135,23 @@ fn string_message_without_delims() {
fn one_with_everything() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock()
+ expect::event()
.with_fields(
- field::mock("message")
+ expect::field("message")
.with_value(&tracing::field::debug(format_args!(
"{:#x} make me one with{what:.>20}",
4_277_009_102u64,
what = "everything"
)))
- .and(field::mock("foo").with_value(&666))
- .and(field::mock("bar").with_value(&false))
- .and(field::mock("like_a_butterfly").with_value(&42.0))
+ .and(expect::field("foo").with_value(&666))
+ .and(expect::field("bar").with_value(&false))
+ .and(expect::field("like_a_butterfly").with_value(&42.0))
.only(),
)
.at_level(Level::ERROR)
.with_target("whatever"),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -163,13 +171,13 @@ fn one_with_everything() {
fn moved_field() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("foo")
+ expect::event().with_fields(
+ expect::field("foo")
.with_value(&display("hello from my event"))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
let from = "my event";
@@ -184,14 +192,14 @@ fn moved_field() {
fn dotted_field_name() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("foo.bar")
+ expect::event().with_fields(
+ expect::field("foo.bar")
.with_value(&true)
- .and(field::mock("foo.baz").with_value(&false))
+ .and(expect::field("foo.baz").with_value(&false))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::event!(Level::INFO, foo.bar = true, foo.baz = false);
@@ -205,13 +213,13 @@ fn dotted_field_name() {
fn borrowed_field() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("foo")
+ expect::event().with_fields(
+ expect::field("foo")
.with_value(&display("hello from my event"))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
let from = "my event";
@@ -242,15 +250,15 @@ fn move_field_out_of_struct() {
};
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("x")
+ expect::event().with_fields(
+ expect::field("x")
.with_value(&debug(3.234))
- .and(field::mock("y").with_value(&debug(-1.223)))
+ .and(expect::field("y").with_value(&debug(-1.223)))
.only(),
),
)
- .event(event::mock().with_fields(field::mock("position").with_value(&debug(&pos))))
- .done()
+ .event(expect::event().with_fields(expect::field("position").with_value(&debug(&pos))))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -269,13 +277,13 @@ fn move_field_out_of_struct() {
fn display_shorthand() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("my_field")
+ expect::event().with_fields(
+ expect::field("my_field")
.with_value(&display("hello world"))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::event!(Level::TRACE, my_field = %"hello world");
@@ -289,13 +297,13 @@ fn display_shorthand() {
fn debug_shorthand() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("my_field")
+ expect::event().with_fields(
+ expect::field("my_field")
.with_value(&debug("hello world"))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::event!(Level::TRACE, my_field = ?"hello world");
@@ -309,14 +317,14 @@ fn debug_shorthand() {
fn both_shorthands() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("display_field")
+ expect::event().with_fields(
+ expect::field("display_field")
.with_value(&display("hello world"))
- .and(field::mock("debug_field").with_value(&debug("hello world")))
+ .and(expect::field("debug_field").with_value(&debug("hello world")))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::event!(Level::TRACE, display_field = %"hello world", debug_field = ?"hello world");
@@ -329,9 +337,9 @@ fn both_shorthands() {
#[test]
fn explicit_child() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .event(event::mock().with_explicit_parent(Some("foo")))
- .done()
+ .new_span(expect::span().named("foo"))
+ .event(expect::event().with_explicit_parent(Some("foo")))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -346,13 +354,13 @@ fn explicit_child() {
#[test]
fn explicit_child_at_levels() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .event(event::mock().with_explicit_parent(Some("foo")))
- .event(event::mock().with_explicit_parent(Some("foo")))
- .event(event::mock().with_explicit_parent(Some("foo")))
- .event(event::mock().with_explicit_parent(Some("foo")))
- .event(event::mock().with_explicit_parent(Some("foo")))
- .done()
+ .new_span(expect::span().named("foo"))
+ .event(expect::event().with_explicit_parent(Some("foo")))
+ .event(expect::event().with_explicit_parent(Some("foo")))
+ .event(expect::event().with_explicit_parent(Some("foo")))
+ .event(expect::event().with_explicit_parent(Some("foo")))
+ .event(expect::event().with_explicit_parent(Some("foo")))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -372,15 +380,15 @@ fn explicit_child_at_levels() {
fn option_values() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("some_str")
+ expect::event().with_fields(
+ expect::field("some_str")
.with_value(&"yes")
- .and(field::mock("some_bool").with_value(&true))
- .and(field::mock("some_u64").with_value(&42_u64))
+ .and(expect::field("some_bool").with_value(&true))
+ .and(expect::field("some_u64").with_value(&42_u64))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -408,15 +416,15 @@ fn option_values() {
fn option_ref_values() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("some_str")
+ expect::event().with_fields(
+ expect::field("some_str")
.with_value(&"yes")
- .and(field::mock("some_bool").with_value(&true))
- .and(field::mock("some_u64").with_value(&42_u64))
+ .and(expect::field("some_bool").with_value(&true))
+ .and(expect::field("some_u64").with_value(&42_u64))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -444,15 +452,15 @@ fn option_ref_values() {
fn option_ref_mut_values() {
let (subscriber, handle) = subscriber::mock()
.event(
- event::mock().with_fields(
- field::mock("some_str")
+ expect::event().with_fields(
+ expect::field("some_str")
.with_value(&"yes")
- .and(field::mock("some_bool").with_value(&true))
- .and(field::mock("some_u64").with_value(&42_u64))
+ .and(expect::field("some_bool").with_value(&true))
+ .and(expect::field("some_u64").with_value(&42_u64))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -479,11 +487,15 @@ fn option_ref_mut_values() {
#[test]
fn string_field() {
let (subscriber, handle) = subscriber::mock()
- .event(event::mock().with_fields(field::mock("my_string").with_value(&"hello").only()))
+ .event(expect::event().with_fields(expect::field("my_string").with_value(&"hello").only()))
.event(
- event::mock().with_fields(field::mock("my_string").with_value(&"hello world!").only()),
+ expect::event().with_fields(
+ expect::field("my_string")
+ .with_value(&"hello world!")
+ .only(),
+ ),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
let mut my_string = String::from("hello");
@@ -498,3 +510,45 @@ fn string_field() {
handle.assert_finished();
}
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
+fn constant_field_name() {
+ let expect_event = || {
+ expect::event().with_fields(
+ expect::field("foo")
+ .with_value(&"bar")
+ .and(expect::field("constant string").with_value(&"also works"))
+ .and(expect::field("foo.bar").with_value(&"baz"))
+ .and(expect::field("message").with_value(&debug(format_args!("quux"))))
+ .only(),
+ )
+ };
+ let (subscriber, handle) = subscriber::mock()
+ .event(expect_event())
+ .event(expect_event())
+ .only()
+ .run_with_handle();
+
+ with_default(subscriber, || {
+ const FOO: &str = "foo";
+ tracing::event!(
+ Level::INFO,
+ { std::convert::identity(FOO) } = "bar",
+ { "constant string" } = "also works",
+ foo.bar = "baz",
+ "quux"
+ );
+ tracing::event!(
+ Level::INFO,
+ {
+ { std::convert::identity(FOO) } = "bar",
+ { "constant string" } = "also works",
+ foo.bar = "baz",
+ },
+ "quux"
+ );
+ });
+
+ handle.assert_finished();
+}
diff --git a/tests/filters_dont_leak.rs b/tests/filters_dont_leak.rs
index 2ef1c9c..c46b91f 100644
--- a/tests/filters_dont_leak.rs
+++ b/tests/filters_dont_leak.rs
@@ -13,14 +13,14 @@ fn spans_dont_leak() {
let (subscriber, handle) = subscriber::mock()
.named("spans/subscriber1")
.with_filter(|_| false)
- .done()
+ .only()
.run_with_handle();
let _guard = tracing::subscriber::set_default(subscriber);
do_span();
- let alice = span::mock().named("alice");
+ let alice = expect::span().named("alice");
let (subscriber2, handle2) = subscriber::mock()
.named("spans/subscriber2")
.with_filter(|_| true)
@@ -28,7 +28,7 @@ fn spans_dont_leak() {
.enter(alice.clone())
.exit(alice.clone())
.drop_span(alice)
- .done()
+ .only()
.run_with_handle();
tracing::subscriber::with_default(subscriber2, || {
@@ -53,7 +53,7 @@ fn events_dont_leak() {
let (subscriber, handle) = subscriber::mock()
.named("events/subscriber1")
.with_filter(|_| false)
- .done()
+ .only()
.run_with_handle();
let _guard = tracing::subscriber::set_default(subscriber);
@@ -63,8 +63,8 @@ fn events_dont_leak() {
let (subscriber2, handle2) = subscriber::mock()
.named("events/subscriber2")
.with_filter(|_| true)
- .event(event::mock())
- .done()
+ .event(expect::event())
+ .only()
.run_with_handle();
tracing::subscriber::with_default(subscriber2, || {
diff --git a/tests/instrument.rs b/tests/instrument.rs
new file mode 100644
index 0000000..5247249
--- /dev/null
+++ b/tests/instrument.rs
@@ -0,0 +1,59 @@
+// These tests require the thread-local scoped dispatcher, which only works when
+// we have a standard library. The behaviour being tested should be the same
+// with the standard lib disabled.
+#![cfg(feature = "std")]
+
+use std::{future::Future, pin::Pin, task};
+
+use futures::FutureExt as _;
+use tracing::{subscriber::with_default, Instrument as _, Level};
+use tracing_mock::*;
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
+fn span_on_drop() {
+ #[derive(Clone, Debug)]
+ struct AssertSpanOnDrop;
+
+ impl Drop for AssertSpanOnDrop {
+ fn drop(&mut self) {
+ tracing::info!("Drop");
+ }
+ }
+
+ struct Fut(Option<AssertSpanOnDrop>);
+
+ impl Future for Fut {
+ type Output = ();
+
+ fn poll(mut self: Pin<&mut Self>, _: &mut task::Context<'_>) -> task::Poll<Self::Output> {
+ self.set(Fut(None));
+ task::Poll::Ready(())
+ }
+ }
+
+ let subscriber = subscriber::mock()
+ .enter(expect::span().named("foo"))
+ .event(expect::event().at_level(Level::INFO))
+ .exit(expect::span().named("foo"))
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .enter(expect::span().named("bar"))
+ .event(expect::event().at_level(Level::INFO))
+ .exit(expect::span().named("bar"))
+ .drop_span(expect::span().named("bar"))
+ .only()
+ .run();
+
+ with_default(subscriber, || {
+ // polled once
+ Fut(Some(AssertSpanOnDrop))
+ .instrument(tracing::span!(Level::TRACE, "foo"))
+ .now_or_never()
+ .unwrap();
+
+ // never polled
+ drop(Fut(Some(AssertSpanOnDrop)).instrument(tracing::span!(Level::TRACE, "bar")));
+ });
+}
diff --git a/tests/macros.rs b/tests/macros.rs
index a9679a3..81b929d 100644
--- a/tests/macros.rs
+++ b/tests/macros.rs
@@ -1,4 +1,14 @@
#![deny(warnings)]
+// We call all macros in this module with `no_implicit_prelude` to ensure they do not depend on the standard prelude.
+#![no_implicit_prelude]
+extern crate tracing;
+#[cfg(target_arch = "wasm32")]
+extern crate wasm_bindgen_test;
+
+// TODO: remove this once https://github.com/tokio-rs/tracing/pull/2675#issuecomment-1667628907 is resolved
+#[cfg(target_arch = "wasm32")]
+use ::core::option::Option::None;
+
use tracing::{
callsite, debug, debug_span, enabled, error, error_span, event, event_enabled, info, info_span,
span, span_enabled, trace, trace_span, warn, warn_span, Level,
@@ -111,80 +121,142 @@ fn error_span() {
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn span_root() {
- span!(target: "foo_events", parent: None, Level::TRACE, "foo", bar.baz = 2, quux = 3);
- span!(target: "foo_events", parent: None, Level::TRACE, "foo", bar.baz = 2, quux = 3);
- span!(target: "foo_events", parent: None, Level::TRACE, "foo", bar.baz = 2, quux = 4,);
- span!(target: "foo_events", parent: None, Level::TRACE, "foo");
- span!(target: "foo_events", parent: None, Level::TRACE, "bar",);
- span!(parent: None, Level::DEBUG, "foo", bar.baz = 2, quux = 3);
- span!(parent: None, Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
- span!(parent: None, Level::DEBUG, "foo");
- span!(parent: None, Level::DEBUG, "bar",);
+ span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo", bar.baz = 2, quux = 3);
+ span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo", bar.baz = 2, quux = 3);
+ span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo", bar.baz = 2, quux = 4,);
+ span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo");
+ span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "bar",);
+ span!(
+ parent: ::core::option::Option::None,
+ Level::DEBUG,
+ "foo",
+ bar.baz = 2,
+ quux = 3
+ );
+ span!(
+ parent: ::core::option::Option::None,
+ Level::DEBUG,
+ "foo",
+ bar.baz = 2,
+ quux = 4,
+ );
+ span!(parent: ::core::option::Option::None, Level::DEBUG, "foo");
+ span!(parent: ::core::option::Option::None, Level::DEBUG, "bar",);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_span_root() {
- trace_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
- trace_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
- trace_span!(target: "foo_events", parent: None, "foo");
- trace_span!(target: "foo_events", parent: None, "bar",);
- trace_span!(parent: None, "foo", bar.baz = 2, quux = 3);
- trace_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
- trace_span!(parent: None, "foo");
- trace_span!(parent: None, "bar",);
+ trace_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
+ trace_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
+ trace_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ trace_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
+ trace_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 3
+ );
+ trace_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 4,
+ );
+ trace_span!(parent: ::core::option::Option::None, "foo");
+ trace_span!(parent: ::core::option::Option::None, "bar",);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_span_root() {
- debug_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
- debug_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
- debug_span!(target: "foo_events", parent: None, "foo");
- debug_span!(target: "foo_events", parent: None, "bar",);
- debug_span!(parent: None, "foo", bar.baz = 2, quux = 3);
- debug_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
- debug_span!(parent: None, "foo");
- debug_span!(parent: None, "bar",);
+ debug_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
+ debug_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
+ debug_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ debug_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
+ debug_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 3
+ );
+ debug_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 4,
+ );
+ debug_span!(parent: ::core::option::Option::None, "foo");
+ debug_span!(parent: ::core::option::Option::None, "bar",);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_span_root() {
- info_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
- info_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
- info_span!(target: "foo_events", parent: None, "foo");
- info_span!(target: "foo_events", parent: None, "bar",);
- info_span!(parent: None, "foo", bar.baz = 2, quux = 3);
- info_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
- info_span!(parent: None, "foo");
- info_span!(parent: None, "bar",);
+ info_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
+ info_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
+ info_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ info_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
+ info_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 3
+ );
+ info_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 4,
+ );
+ info_span!(parent: ::core::option::Option::None, "foo");
+ info_span!(parent: ::core::option::Option::None, "bar",);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_span_root() {
- warn_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
- warn_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
- warn_span!(target: "foo_events", parent: None, "foo");
- warn_span!(target: "foo_events", parent: None, "bar",);
- warn_span!(parent: None, "foo", bar.baz = 2, quux = 3);
- warn_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
- warn_span!(parent: None, "foo");
- warn_span!(parent: None, "bar",);
+ warn_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
+ warn_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
+ warn_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ warn_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
+ warn_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 3
+ );
+ warn_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 4,
+ );
+ warn_span!(parent: ::core::option::Option::None, "foo");
+ warn_span!(parent: ::core::option::Option::None, "bar",);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_span_root() {
- error_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
- error_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
- error_span!(target: "foo_events", parent: None, "foo");
- error_span!(target: "foo_events", parent: None, "bar",);
- error_span!(parent: None, "foo", bar.baz = 2, quux = 3);
- error_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
- error_span!(parent: None, "foo");
- error_span!(parent: None, "bar",);
+ error_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
+ error_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
+ error_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ error_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
+ error_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 3
+ );
+ error_span!(
+ parent: ::core::option::Option::None,
+ "foo",
+ bar.baz = 2,
+ quux = 4,
+ );
+ error_span!(parent: ::core::option::Option::None, "foo");
+ error_span!(parent: ::core::option::Option::None, "bar",);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -300,6 +372,48 @@ fn span_with_non_rust_symbol() {
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
+fn large_span() {
+ span!(
+ Level::TRACE,
+ "spans with more than 32 fields have been supported since #2508",
+ a = 1,
+ b = 2,
+ c = 3,
+ d = 4,
+ e = 5,
+ f = 6,
+ g = 7,
+ h = 8,
+ i = 9,
+ j = 10,
+ k = 11,
+ l = 12,
+ m = 13,
+ n = 14,
+ o = 15,
+ p = 16,
+ q = 17,
+ r = 18,
+ s = 19,
+ t = 20,
+ u = 21,
+ v = 22,
+ w = 23,
+ x = 24,
+ y = 25,
+ z = 26,
+ aa = 27,
+ bb = 28,
+ cc = 29,
+ dd = 30,
+ ee = 31,
+ ff = 32,
+ gg = 33
+ );
+}
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
fn event() {
event!(Level::DEBUG, foo = ?3, bar.baz = %2, quux = false);
event!(Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
@@ -400,6 +514,13 @@ fn locals_no_message() {
let private_data = "private";
let error = "a bad error";
event!(
+ name: "foo",
+ target: "app_events",
+ Level::WARN,
+ private_data,
+ ?data,
+ );
+ event!(
target: "app_events",
Level::WARN,
private_data,
@@ -438,6 +559,8 @@ fn trace() {
trace!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
trace!({ foo = 2, bar.baz = 78 }, "quux");
trace!({ foo = ?2, bar.baz = %78 }, "quux");
+ trace!(name: "foo", foo = 3, bar.baz = 2, quux = false);
+ trace!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
trace!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
trace!(target: "foo_events", foo = 3, bar.baz = 3,);
trace!(target: "foo_events", "foo");
@@ -450,6 +573,12 @@ fn trace() {
trace!(?foo);
trace!(%foo);
trace!(foo);
+ trace!(name: "foo", ?foo);
+ trace!(name: "foo", %foo);
+ trace!(name: "foo", foo);
+ trace!(name: "foo", ?foo, true, "message");
+ trace!(name: "foo", %foo, true, "message");
+ trace!(name: "foo", foo, true, "message");
trace!(target: "foo_events", ?foo);
trace!(target: "foo_events", %foo);
trace!(target: "foo_events", foo);
@@ -474,6 +603,8 @@ fn debug() {
debug!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
debug!({ foo = 2, bar.baz = 78 }, "quux");
debug!({ foo = ?2, bar.baz = %78 }, "quux");
+ debug!(name: "foo", foo = 3, bar.baz = 2, quux = false);
+ debug!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
debug!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
debug!(target: "foo_events", foo = 3, bar.baz = 3,);
debug!(target: "foo_events", "foo");
@@ -486,6 +617,12 @@ fn debug() {
debug!(?foo);
debug!(%foo);
debug!(foo);
+ debug!(name: "foo", ?foo);
+ debug!(name: "foo", %foo);
+ debug!(name: "foo", foo);
+ debug!(name: "foo", ?foo, true, "message");
+ debug!(name: "foo", %foo, true, "message");
+ debug!(name: "foo", foo, true, "message");
debug!(target: "foo_events", ?foo);
debug!(target: "foo_events", %foo);
debug!(target: "foo_events", foo);
@@ -510,6 +647,8 @@ fn info() {
info!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
info!({ foo = 2, bar.baz = 78 }, "quux");
info!({ foo = ?2, bar.baz = %78 }, "quux");
+ info!(name: "foo", foo = 3, bar.baz = 2, quux = false);
+ info!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
info!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
info!(target: "foo_events", foo = 3, bar.baz = 3,);
info!(target: "foo_events", "foo");
@@ -522,6 +661,12 @@ fn info() {
info!(?foo);
info!(%foo);
info!(foo);
+ info!(name: "foo", ?foo);
+ info!(name: "foo", %foo);
+ info!(name: "foo", foo);
+ info!(name: "foo", ?foo, true, "message");
+ info!(name: "foo", %foo, true, "message");
+ info!(name: "foo", foo, true, "message");
info!(target: "foo_events", ?foo);
info!(target: "foo_events", %foo);
info!(target: "foo_events", foo);
@@ -546,6 +691,8 @@ fn warn() {
warn!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
warn!({ foo = 2, bar.baz = 78 }, "quux");
warn!({ foo = ?2, bar.baz = %78 }, "quux");
+ warn!(name: "foo", foo = 3, bar.baz = 2, quux = false);
+ warn!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
warn!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
warn!(target: "foo_events", foo = 3, bar.baz = 3,);
warn!(target: "foo_events", "foo");
@@ -558,6 +705,12 @@ fn warn() {
warn!(?foo);
warn!(%foo);
warn!(foo);
+ warn!(name: "foo", ?foo);
+ warn!(name: "foo", %foo);
+ warn!(name: "foo", foo);
+ warn!(name: "foo", ?foo, true, "message");
+ warn!(name: "foo", %foo, true, "message");
+ warn!(name: "foo", foo, true, "message");
warn!(target: "foo_events", ?foo);
warn!(target: "foo_events", %foo);
warn!(target: "foo_events", foo);
@@ -582,6 +735,8 @@ fn error() {
error!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
error!({ foo = 2, bar.baz = 78, }, "quux");
error!({ foo = ?2, bar.baz = %78 }, "quux");
+ error!(name: "foo", foo = 3, bar.baz = 2, quux = false);
+ error!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
error!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
error!(target: "foo_events", foo = 3, bar.baz = 3,);
error!(target: "foo_events", "foo");
@@ -594,6 +749,12 @@ fn error() {
error!(?foo);
error!(%foo);
error!(foo);
+ error!(name: "foo", ?foo);
+ error!(name: "foo", %foo);
+ error!(name: "foo", foo);
+ error!(name: "foo", ?foo, true, "message");
+ error!(name: "foo", %foo, true, "message");
+ error!(name: "foo", foo, true, "message");
error!(target: "foo_events", ?foo);
error!(target: "foo_events", %foo);
error!(target: "foo_events", foo);
@@ -605,144 +766,227 @@ fn error() {
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn event_root() {
- event!(parent: None, Level::DEBUG, foo = ?3, bar.baz = %2, quux = false);
+ event!(parent: ::core::option::Option::None, Level::DEBUG, foo = ?3, bar.baz = %2, quux = false);
event!(
- parent: None,
+ parent: ::core::option::Option::None,
Level::DEBUG,
foo = 3,
bar.baz = 2,
quux = false
);
- event!(parent: None, Level::DEBUG, foo = 3, bar.baz = 3,);
- event!(parent: None, Level::DEBUG, "foo");
- event!(parent: None, Level::DEBUG, "foo: {}", 3);
- event!(parent: None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
- event!(parent: None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- event!(parent: None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- event!(parent: None, Level::DEBUG, { foo = ?2, bar.baz = %78 }, "quux");
- event!(target: "foo_events", parent: None, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
- event!(target: "foo_events", parent: None, Level::DEBUG, foo = 3, bar.baz = 3,);
- event!(target: "foo_events", parent: None, Level::DEBUG, "foo");
- event!(target: "foo_events", parent: None, Level::DEBUG, "foo: {}", 3);
- event!(target: "foo_events", parent: None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
- event!(target: "foo_events", parent: None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- event!(target: "foo_events", parent: None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- event!(target: "foo_events", parent: None, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
+ event!(
+ parent: ::core::option::Option::None,
+ Level::DEBUG,
+ foo = 3,
+ bar.baz = 3,
+ );
+ event!(parent: ::core::option::Option::None, Level::DEBUG, "foo");
+ event!(
+ parent: ::core::option::Option::None,
+ Level::DEBUG,
+ "foo: {}",
+ 3
+ );
+ event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
+ event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = ?2, bar.baz = %78 }, "quux");
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 3,);
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo");
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo: {}", 3);
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 3,);
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo");
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo: {}", 3);
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_root() {
- trace!(parent: None, foo = ?3, bar.baz = %2, quux = false);
- trace!(parent: None, foo = 3, bar.baz = 2, quux = false);
- trace!(parent: None, foo = 3, bar.baz = 3,);
- trace!(parent: None, "foo");
- trace!(parent: None, "foo: {}", 3);
- trace!(parent: None, { foo = 3, bar.baz = 80 }, "quux");
- trace!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- trace!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- trace!(parent: None, { foo = 2, bar.baz = 78 }, "quux");
- trace!(parent: None, { foo = ?2, bar.baz = %78 }, "quux");
- trace!(target: "foo_events", parent: None, foo = 3, bar.baz = 2, quux = false);
- trace!(target: "foo_events", parent: None, foo = 3, bar.baz = 3,);
- trace!(target: "foo_events", parent: None, "foo");
- trace!(target: "foo_events", parent: None, "foo: {}", 3);
- trace!(target: "foo_events", parent: None, { foo = 3, bar.baz = 80 }, "quux");
- trace!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- trace!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- trace!(target: "foo_events", parent: None, { foo = 2, bar.baz = 78, }, "quux");
+ trace!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
+ trace!(
+ parent: ::core::option::Option::None,
+ foo = 3,
+ bar.baz = 2,
+ quux = false
+ );
+ trace!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ trace!(parent: ::core::option::Option::None, "foo");
+ trace!(parent: ::core::option::Option::None, "foo: {}", 3);
+ trace!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ trace!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ trace!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ trace!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
+ trace!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
+ trace!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ trace!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ trace!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ trace!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_root() {
- debug!(parent: None, foo = ?3, bar.baz = %2, quux = false);
- debug!(parent: None, foo = 3, bar.baz = 2, quux = false);
- debug!(parent: None, foo = 3, bar.baz = 3,);
- debug!(parent: None, "foo");
- debug!(parent: None, "foo: {}", 3);
- debug!(parent: None, { foo = 3, bar.baz = 80 }, "quux");
- debug!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- debug!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- debug!(parent: None, { foo = 2, bar.baz = 78 }, "quux");
- debug!(parent: None, { foo = ?2, bar.baz = %78 }, "quux");
- debug!(target: "foo_events", parent: None, foo = 3, bar.baz = 2, quux = false);
- debug!(target: "foo_events", parent: None, foo = 3, bar.baz = 3,);
- debug!(target: "foo_events", parent: None, "foo");
- debug!(target: "foo_events", parent: None, "foo: {}", 3);
- debug!(target: "foo_events", parent: None, { foo = 3, bar.baz = 80 }, "quux");
- debug!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- debug!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- debug!(target: "foo_events", parent: None, { foo = 2, bar.baz = 78, }, "quux");
+ debug!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
+ debug!(
+ parent: ::core::option::Option::None,
+ foo = 3,
+ bar.baz = 2,
+ quux = false
+ );
+ debug!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ debug!(parent: ::core::option::Option::None, "foo");
+ debug!(parent: ::core::option::Option::None, "foo: {}", 3);
+ debug!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ debug!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ debug!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ debug!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
+ debug!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
+ debug!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ debug!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ debug!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ debug!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_root() {
- info!(parent: None, foo = ?3, bar.baz = %2, quux = false);
- info!(parent: None, foo = 3, bar.baz = 2, quux = false);
- info!(parent: None, foo = 3, bar.baz = 3,);
- info!(parent: None, "foo");
- info!(parent: None, "foo: {}", 3);
- info!(parent: None, { foo = 3, bar.baz = 80 }, "quux");
- info!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- info!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- info!(parent: None, { foo = 2, bar.baz = 78 }, "quux");
- info!(parent: None, { foo = ?2, bar.baz = %78 }, "quux");
- info!(target: "foo_events", parent: None, foo = 3, bar.baz = 2, quux = false);
- info!(target: "foo_events", parent: None, foo = 3, bar.baz = 3,);
- info!(target: "foo_events", parent: None, "foo");
- info!(target: "foo_events", parent: None, "foo: {}", 3);
- info!(target: "foo_events", parent: None, { foo = 3, bar.baz = 80 }, "quux");
- info!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- info!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- info!(target: "foo_events", parent: None, { foo = 2, bar.baz = 78, }, "quux");
+ info!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
+ info!(
+ parent: ::core::option::Option::None,
+ foo = 3,
+ bar.baz = 2,
+ quux = false
+ );
+ info!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ info!(parent: ::core::option::Option::None, "foo");
+ info!(parent: ::core::option::Option::None, "foo: {}", 3);
+ info!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ info!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ info!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ info!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
+ info!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
+ info!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ info!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ info!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ info!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_root() {
- warn!(parent: None, foo = ?3, bar.baz = %2, quux = false);
- warn!(parent: None, foo = 3, bar.baz = 2, quux = false);
- warn!(parent: None, foo = 3, bar.baz = 3,);
- warn!(parent: None, "foo");
- warn!(parent: None, "foo: {}", 3);
- warn!(parent: None, { foo = 3, bar.baz = 80 }, "quux");
- warn!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- warn!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- warn!(parent: None, { foo = 2, bar.baz = 78 }, "quux");
- warn!(parent: None, { foo = ?2, bar.baz = %78 }, "quux");
- warn!(target: "foo_events", parent: None, foo = 3, bar.baz = 2, quux = false);
- warn!(target: "foo_events", parent: None, foo = 3, bar.baz = 3,);
- warn!(target: "foo_events", parent: None, "foo");
- warn!(target: "foo_events", parent: None, "foo: {}", 3);
- warn!(target: "foo_events", parent: None, { foo = 3, bar.baz = 80 }, "quux");
- warn!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- warn!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- warn!(target: "foo_events", parent: None, { foo = 2, bar.baz = 78, }, "quux");
+ warn!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
+ warn!(
+ parent: ::core::option::Option::None,
+ foo = 3,
+ bar.baz = 2,
+ quux = false
+ );
+ warn!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ warn!(parent: ::core::option::Option::None, "foo");
+ warn!(parent: ::core::option::Option::None, "foo: {}", 3);
+ warn!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ warn!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ warn!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ warn!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
+ warn!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
+ warn!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ warn!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ warn!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ warn!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_root() {
- error!(parent: None, foo = ?3, bar.baz = %2, quux = false);
- error!(parent: None, foo = 3, bar.baz = 2, quux = false);
- error!(parent: None, foo = 3, bar.baz = 3,);
- error!(parent: None, "foo");
- error!(parent: None, "foo: {}", 3);
- error!(parent: None, { foo = 3, bar.baz = 80 }, "quux");
- error!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- error!(parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- error!(parent: None, { foo = 2, bar.baz = 78 }, "quux");
- error!(parent: None, { foo = ?2, bar.baz = %78 }, "quux");
- error!(target: "foo_events", parent: None, foo = 3, bar.baz = 2, quux = false);
- error!(target: "foo_events", parent: None, foo = 3, bar.baz = 3,);
- error!(target: "foo_events", parent: None, "foo");
- error!(target: "foo_events", parent: None, "foo: {}", 3);
- error!(target: "foo_events", parent: None, { foo = 3, bar.baz = 80 }, "quux");
- error!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
- error!(target: "foo_events", parent: None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
- error!(target: "foo_events", parent: None, { foo = 2, bar.baz = 78, }, "quux");
+ error!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
+ error!(
+ parent: ::core::option::Option::None,
+ foo = 3,
+ bar.baz = 2,
+ quux = false
+ );
+ error!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ error!(parent: ::core::option::Option::None, "foo");
+ error!(parent: ::core::option::Option::None, "foo: {}", 3);
+ error!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ error!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ error!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ error!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
+ error!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
+ error!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ error!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ error!(target: "foo_events", parent: ::core::option::Option::None, "foo");
+ error!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -766,6 +1010,14 @@ fn event_with_parent() {
event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, foo = 3, bar.baz = 3,);
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, "foo");
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, "foo: {}", 3);
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -790,6 +1042,14 @@ fn trace_with_parent() {
trace!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
trace!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
trace!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
+ trace!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
+ trace!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
+ trace!(name: "foo", target: "foo_events", parent: &p, "foo");
+ trace!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
+ trace!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
+ trace!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ trace!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ trace!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -814,6 +1074,14 @@ fn debug_with_parent() {
debug!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
debug!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
debug!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
+ debug!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
+ debug!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
+ debug!(name: "foo", target: "foo_events", parent: &p, "foo");
+ debug!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
+ debug!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
+ debug!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ debug!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ debug!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -838,6 +1106,14 @@ fn info_with_parent() {
info!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
info!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
info!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
+ info!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
+ info!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
+ info!(name: "foo", target: "foo_events", parent: &p, "foo");
+ info!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
+ info!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
+ info!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ info!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ info!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -862,6 +1138,14 @@ fn warn_with_parent() {
warn!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
warn!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
warn!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
+ warn!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
+ warn!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
+ warn!(name: "foo", target: "foo_events", parent: &p, "foo");
+ warn!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
+ warn!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
+ warn!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ warn!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ warn!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -886,6 +1170,14 @@ fn error_with_parent() {
error!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
error!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
error!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
+ error!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
+ error!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
+ error!(name: "foo", target: "foo_events", parent: &p, "foo");
+ error!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
+ error!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
+ error!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
+ error!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
+ error!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
@@ -913,7 +1205,7 @@ fn field_shorthand_only() {
#[test]
fn borrow_val_events() {
// Reproduces https://github.com/tokio-rs/tracing/issues/954
- let mut foo = (String::new(), String::new());
+ let mut foo = (::std::string::String::new(), ::std::string::String::new());
let zero = &mut foo.0;
trace!(one = ?foo.1);
debug!(one = ?foo.1);
@@ -927,7 +1219,7 @@ fn borrow_val_events() {
#[test]
fn borrow_val_spans() {
// Reproduces https://github.com/tokio-rs/tracing/issues/954
- let mut foo = (String::new(), String::new());
+ let mut foo = (::std::string::String::new(), ::std::string::String::new());
let zero = &mut foo.0;
let _span = trace_span!("span", one = ?foo.1);
let _span = debug_span!("span", one = ?foo.1);
@@ -961,3 +1253,19 @@ fn callsite_macro_api() {
fields: foo,
};
}
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
+fn format_args_already_defined() {
+ // Reproduces: https://github.com/tokio-rs/tracing/issues/2721
+ #[allow(unused)]
+ macro_rules! format_args {
+ ($i:expr) => {};
+ }
+ event!(Level::DEBUG, "foo: {}", 3);
+ trace!("foo: {}", 3);
+ debug!("foo: {}", 3);
+ info!("foo: {}", 3);
+ warn!("foo: {}", 3);
+ error!("foo: {}", 3);
+}
diff --git a/tests/macros_redefined_core.rs b/tests/macros_redefined_core.rs
deleted file mode 100644
index d830dcd..0000000
--- a/tests/macros_redefined_core.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-extern crate self as core;
-
-use tracing::{enabled, event, span, Level};
-
-#[test]
-fn span() {
- span!(Level::DEBUG, "foo");
-}
-
-#[test]
-fn event() {
- event!(Level::DEBUG, "foo");
-}
-
-#[test]
-fn enabled() {
- enabled!(Level::DEBUG);
-}
diff --git a/tests/max_level_hint.rs b/tests/max_level_hint.rs
index 63d3af6..2e04bc3 100644
--- a/tests/max_level_hint.rs
+++ b/tests/max_level_hint.rs
@@ -20,10 +20,10 @@ fn max_level_hints() {
);
true
})
- .event(event::mock().at_level(Level::INFO))
- .event(event::mock().at_level(Level::WARN))
- .event(event::mock().at_level(Level::ERROR))
- .done()
+ .event(expect::event().at_level(Level::INFO))
+ .event(expect::event().at_level(Level::WARN))
+ .event(expect::event().at_level(Level::ERROR))
+ .only()
.run_with_handle();
tracing::subscriber::set_global_default(subscriber).unwrap();
diff --git a/tests/multiple_max_level_hints.rs b/tests/multiple_max_level_hints.rs
index dd50a19..f78fda7 100644
--- a/tests/multiple_max_level_hints.rs
+++ b/tests/multiple_max_level_hints.rs
@@ -35,10 +35,10 @@ fn multiple_max_level_hints() {
);
level <= &Level::INFO
})
- .event(event::mock().at_level(Level::INFO))
- .event(event::mock().at_level(Level::WARN))
- .event(event::mock().at_level(Level::ERROR))
- .done()
+ .event(expect::event().at_level(Level::INFO))
+ .event(expect::event().at_level(Level::WARN))
+ .event(expect::event().at_level(Level::ERROR))
+ .only()
.run_with_handle();
let (subscriber2, handle2) = subscriber::mock()
.named("subscriber2")
@@ -51,11 +51,11 @@ fn multiple_max_level_hints() {
);
level <= &Level::DEBUG
})
- .event(event::mock().at_level(Level::INFO))
- .event(event::mock().at_level(Level::DEBUG))
- .event(event::mock().at_level(Level::WARN))
- .event(event::mock().at_level(Level::ERROR))
- .done()
+ .event(expect::event().at_level(Level::INFO))
+ .event(expect::event().at_level(Level::DEBUG))
+ .event(expect::event().at_level(Level::WARN))
+ .event(expect::event().at_level(Level::ERROR))
+ .only()
.run_with_handle();
let dispatch1 = tracing::Dispatch::new(subscriber1);
diff --git a/tests/no_subscriber.rs b/tests/no_subscriber.rs
index 5f927c1..d15a2c8 100644
--- a/tests/no_subscriber.rs
+++ b/tests/no_subscriber.rs
@@ -1,14 +1,15 @@
#![cfg(feature = "std")]
-use tracing::subscriber::{self, NoSubscriber};
+use tracing_mock::subscriber;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn no_subscriber_disables_global() {
// Reproduces https://github.com/tokio-rs/tracing/issues/1999
- let (subscriber, handle) = tracing_mock::subscriber::mock().done().run_with_handle();
- subscriber::set_global_default(subscriber).expect("setting global default must succeed");
- subscriber::with_default(NoSubscriber::default(), || {
+ let (subscriber, handle) = subscriber::mock().only().run_with_handle();
+ tracing::subscriber::set_global_default(subscriber)
+ .expect("setting global default must succeed");
+ tracing::subscriber::with_default(tracing::subscriber::NoSubscriber::default(), || {
tracing::info!("this should not be recorded");
});
handle.assert_finished();
diff --git a/tests/scoped_clobbers_default.rs b/tests/scoped_clobbers_default.rs
index 362d34a..dfd6fc9 100644
--- a/tests/scoped_clobbers_default.rs
+++ b/tests/scoped_clobbers_default.rs
@@ -8,12 +8,12 @@ fn scoped_clobbers_global() {
let (scoped, scoped_handle) = subscriber::mock()
.event(event::msg("before global"))
.event(event::msg("before drop"))
- .done()
+ .only()
.run_with_handle();
let (global, global_handle) = subscriber::mock()
.event(event::msg("after drop"))
- .done()
+ .only()
.run_with_handle();
// Set a scoped default subscriber, returning a guard.
diff --git a/tests/span.rs b/tests/span.rs
index 4ed6500..09f1be8 100644
--- a/tests/span.rs
+++ b/tests/span.rs
@@ -21,7 +21,12 @@ fn handles_to_the_same_span_are_equal() {
// expect to see any spans.
with_default(subscriber::mock().run(), || {
let foo1 = tracing::span!(Level::TRACE, "foo");
+
+ // The purpose of this test is to assert that two clones of the same
+ // span are equal, so the clone here is kind of the whole point :)
+ #[allow(clippy::redundant_clone)]
let foo2 = foo1.clone();
+
// Two handles that point to the same span are equal.
assert_eq!(foo1, foo2);
});
@@ -62,12 +67,12 @@ fn handles_to_different_spans_with_the_same_metadata_are_not_equal() {
#[test]
fn spans_always_go_to_the_subscriber_that_tagged_them() {
let subscriber1 = subscriber::mock()
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run();
let subscriber2 = subscriber::mock().run();
@@ -89,12 +94,12 @@ fn spans_always_go_to_the_subscriber_that_tagged_them() {
#[test]
fn spans_always_go_to_the_subscriber_that_tagged_them_even_across_threads() {
let subscriber1 = subscriber::mock()
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run();
let foo = with_default(subscriber1, || {
let foo = tracing::span!(Level::TRACE, "foo");
@@ -117,10 +122,10 @@ fn spans_always_go_to_the_subscriber_that_tagged_them_even_across_threads() {
#[test]
fn dropping_a_span_calls_drop_span() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let span = tracing::span!(Level::TRACE, "foo");
@@ -135,11 +140,11 @@ fn dropping_a_span_calls_drop_span() {
#[test]
fn span_closes_after_event() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .event(event::mock())
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .event(expect::event())
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::span!(Level::TRACE, "foo").in_scope(|| {
@@ -154,14 +159,14 @@ fn span_closes_after_event() {
#[test]
fn new_span_after_event() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .event(event::mock())
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .enter(span::mock().named("bar"))
- .exit(span::mock().named("bar"))
- .drop_span(span::mock().named("bar"))
- .done()
+ .enter(expect::span().named("foo"))
+ .event(expect::event())
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .enter(expect::span().named("bar"))
+ .exit(expect::span().named("bar"))
+ .drop_span(expect::span().named("bar"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::span!(Level::TRACE, "foo").in_scope(|| {
@@ -177,11 +182,11 @@ fn new_span_after_event() {
#[test]
fn event_outside_of_span() {
let (subscriber, handle) = subscriber::mock()
- .event(event::mock())
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .event(expect::event())
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::debug!("my tracing::event!");
@@ -195,7 +200,7 @@ fn event_outside_of_span() {
#[test]
fn cloning_a_span_calls_clone_span() {
let (subscriber, handle) = subscriber::mock()
- .clone_span(span::mock().named("foo"))
+ .clone_span(expect::span().named("foo"))
.run_with_handle();
with_default(subscriber, || {
let span = tracing::span!(Level::TRACE, "foo");
@@ -211,9 +216,9 @@ fn cloning_a_span_calls_clone_span() {
#[test]
fn drop_span_when_exiting_dispatchers_context() {
let (subscriber, handle) = subscriber::mock()
- .clone_span(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
+ .clone_span(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
.run_with_handle();
with_default(subscriber, || {
let span = tracing::span!(Level::TRACE, "foo");
@@ -228,15 +233,15 @@ fn drop_span_when_exiting_dispatchers_context() {
#[test]
fn clone_and_drop_span_always_go_to_the_subscriber_that_tagged_the_span() {
let (subscriber1, handle1) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .clone_span(span::mock().named("foo"))
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .clone_span(expect::span().named("foo"))
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
.run_with_handle();
- let subscriber2 = subscriber::mock().done().run();
+ let subscriber2 = subscriber::mock().only().run();
let foo = with_default(subscriber1, || {
let foo = tracing::span!(Level::TRACE, "foo");
@@ -259,10 +264,10 @@ fn clone_and_drop_span_always_go_to_the_subscriber_that_tagged_the_span() {
#[test]
fn span_closes_when_exited() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let foo = tracing::span!(Level::TRACE, "foo");
@@ -279,11 +284,11 @@ fn span_closes_when_exited() {
#[test]
fn enter() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .event(event::mock())
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .event(expect::event())
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let foo = tracing::span!(Level::TRACE, "foo");
@@ -298,11 +303,11 @@ fn enter() {
#[test]
fn entered() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .event(event::mock())
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .event(expect::event())
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let _span = tracing::span!(Level::TRACE, "foo").entered();
@@ -316,11 +321,11 @@ fn entered() {
#[test]
fn entered_api() {
let (subscriber, handle) = subscriber::mock()
- .enter(span::mock().named("foo"))
- .event(event::mock())
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .event(expect::event())
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let span = tracing::span!(Level::TRACE, "foo").entered();
@@ -337,16 +342,16 @@ fn entered_api() {
fn moved_field() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("bar")
+ expect::span().named("foo").with_field(
+ expect::field("bar")
.with_value(&display("hello from my span"))
.only(),
),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let from = "my span";
@@ -366,11 +371,11 @@ fn moved_field() {
fn dotted_field_name() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock()
+ expect::span()
.named("foo")
- .with_field(field::mock("fields.bar").with_value(&true).only()),
+ .with_field(expect::field("fields.bar").with_value(&true).only()),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::span!(Level::TRACE, "foo", fields.bar = true);
@@ -384,16 +389,16 @@ fn dotted_field_name() {
fn borrowed_field() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("bar")
+ expect::span().named("foo").with_field(
+ expect::field("bar")
.with_value(&display("hello from my span"))
.only(),
),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -427,17 +432,17 @@ fn move_field_out_of_struct() {
};
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("x")
+ expect::span().named("foo").with_field(
+ expect::field("x")
.with_value(&debug(3.234))
- .and(field::mock("y").with_value(&debug(-1.223)))
+ .and(expect::field("y").with_value(&debug(-1.223)))
.only(),
),
)
.new_span(
- span::mock()
+ expect::span()
.named("bar")
- .with_field(field::mock("position").with_value(&debug(&pos)).only()),
+ .with_field(expect::field("position").with_value(&debug(&pos)).only()),
)
.run_with_handle();
@@ -460,10 +465,10 @@ fn move_field_out_of_struct() {
fn float_values() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("x")
+ expect::span().named("foo").with_field(
+ expect::field("x")
.with_value(&3.234)
- .and(field::mock("y").with_value(&-1.223))
+ .and(expect::field("y").with_value(&-1.223))
.only(),
),
)
@@ -485,19 +490,19 @@ fn float_values() {
fn add_field_after_new_span() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock()
+ expect::span()
.named("foo")
- .with_field(field::mock("bar").with_value(&5)
- .and(field::mock("baz").with_value).only()),
+ .with_field(expect::field("bar").with_value(&5)
+ .and(expect::field("baz").with_value).only()),
)
.record(
- span::mock().named("foo"),
- field::mock("baz").with_value(&true).only(),
+ expect::span().named("foo"),
+ field::expect("baz").with_value(&true).only(),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -513,19 +518,19 @@ fn add_field_after_new_span() {
#[test]
fn add_fields_only_after_new_span() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
+ .new_span(expect::span().named("foo"))
.record(
- span::mock().named("foo"),
- field::mock("bar").with_value(&5).only(),
+ expect::span().named("foo"),
+ field::expect("bar").with_value(&5).only(),
)
.record(
- span::mock().named("foo"),
- field::mock("baz").with_value(&true).only(),
+ expect::span().named("foo"),
+ field::expect("baz").with_value(&true).only(),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -544,26 +549,26 @@ fn add_fields_only_after_new_span() {
fn record_new_value_for_field() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("bar")
+ expect::span().named("foo").with_field(
+ expect::field("bar")
.with_value(&5)
- .and(field::mock("baz").with_value(&false))
+ .and(expect::field("baz").with_value(&false))
.only(),
),
)
.record(
- span::mock().named("foo"),
- field::mock("baz").with_value(&true).only(),
+ expect::span().named("foo"),
+ expect::field("baz").with_value(&true).only(),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let span = tracing::span!(Level::TRACE, "foo", bar = 5, baz = false);
- span.record("baz", &true);
+ span.record("baz", true);
span.in_scope(|| {})
});
@@ -575,31 +580,31 @@ fn record_new_value_for_field() {
fn record_new_values_for_fields() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("bar")
+ expect::span().named("foo").with_field(
+ expect::field("bar")
.with_value(&4)
- .and(field::mock("baz").with_value(&false))
+ .and(expect::field("baz").with_value(&false))
.only(),
),
)
.record(
- span::mock().named("foo"),
- field::mock("bar").with_value(&5).only(),
+ expect::span().named("foo"),
+ expect::field("bar").with_value(&5).only(),
)
.record(
- span::mock().named("foo"),
- field::mock("baz").with_value(&true).only(),
+ expect::span().named("foo"),
+ expect::field("baz").with_value(&true).only(),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
let span = tracing::span!(Level::TRACE, "foo", bar = 4, baz = false);
- span.record("bar", &5);
- span.record("baz", &true);
+ span.record("bar", 5);
+ span.record("baz", true);
span.in_scope(|| {})
});
@@ -611,12 +616,12 @@ fn record_new_values_for_fields() {
fn new_span_with_target_and_log_level() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock()
+ expect::span()
.named("foo")
.with_target("app_span")
.at_level(Level::DEBUG),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -630,8 +635,8 @@ fn new_span_with_target_and_log_level() {
#[test]
fn explicit_root_span_is_root() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo").with_explicit_parent(None))
- .done()
+ .new_span(expect::span().named("foo").with_explicit_parent(None))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -645,11 +650,11 @@ fn explicit_root_span_is_root() {
#[test]
fn explicit_root_span_is_root_regardless_of_ctx() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .enter(span::mock().named("foo"))
- .new_span(span::mock().named("bar").with_explicit_parent(None))
- .exit(span::mock().named("foo"))
- .done()
+ .new_span(expect::span().named("foo"))
+ .enter(expect::span().named("foo"))
+ .new_span(expect::span().named("bar").with_explicit_parent(None))
+ .exit(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -665,9 +670,13 @@ fn explicit_root_span_is_root_regardless_of_ctx() {
#[test]
fn explicit_child() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .new_span(span::mock().named("bar").with_explicit_parent(Some("foo")))
- .done()
+ .new_span(expect::span().named("foo"))
+ .new_span(
+ expect::span()
+ .named("bar")
+ .with_explicit_parent(Some("foo")),
+ )
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -682,13 +691,13 @@ fn explicit_child() {
#[test]
fn explicit_child_at_levels() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .new_span(span::mock().named("a").with_explicit_parent(Some("foo")))
- .new_span(span::mock().named("b").with_explicit_parent(Some("foo")))
- .new_span(span::mock().named("c").with_explicit_parent(Some("foo")))
- .new_span(span::mock().named("d").with_explicit_parent(Some("foo")))
- .new_span(span::mock().named("e").with_explicit_parent(Some("foo")))
- .done()
+ .new_span(expect::span().named("foo"))
+ .new_span(expect::span().named("a").with_explicit_parent(Some("foo")))
+ .new_span(expect::span().named("b").with_explicit_parent(Some("foo")))
+ .new_span(expect::span().named("c").with_explicit_parent(Some("foo")))
+ .new_span(expect::span().named("d").with_explicit_parent(Some("foo")))
+ .new_span(expect::span().named("e").with_explicit_parent(Some("foo")))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -707,12 +716,16 @@ fn explicit_child_at_levels() {
#[test]
fn explicit_child_regardless_of_ctx() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .new_span(span::mock().named("bar"))
- .enter(span::mock().named("bar"))
- .new_span(span::mock().named("baz").with_explicit_parent(Some("foo")))
- .exit(span::mock().named("bar"))
- .done()
+ .new_span(expect::span().named("foo"))
+ .new_span(expect::span().named("bar"))
+ .enter(expect::span().named("bar"))
+ .new_span(
+ expect::span()
+ .named("baz")
+ .with_explicit_parent(Some("foo")),
+ )
+ .exit(expect::span().named("bar"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -728,8 +741,8 @@ fn explicit_child_regardless_of_ctx() {
#[test]
fn contextual_root() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo").with_contextual_parent(None))
- .done()
+ .new_span(expect::span().named("foo").with_contextual_parent(None))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -743,15 +756,15 @@ fn contextual_root() {
#[test]
fn contextual_child() {
let (subscriber, handle) = subscriber::mock()
- .new_span(span::mock().named("foo"))
- .enter(span::mock().named("foo"))
+ .new_span(expect::span().named("foo"))
+ .enter(expect::span().named("foo"))
.new_span(
- span::mock()
+ expect::span()
.named("bar")
.with_contextual_parent(Some("foo")),
)
- .exit(span::mock().named("foo"))
- .done()
+ .exit(expect::span().named("foo"))
+ .only()
.run_with_handle();
with_default(subscriber, || {
@@ -768,13 +781,13 @@ fn contextual_child() {
fn display_shorthand() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("my_span").with_field(
- field::mock("my_field")
+ expect::span().named("my_span").with_field(
+ expect::field("my_field")
.with_value(&display("hello world"))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::span!(Level::TRACE, "my_span", my_field = %"hello world");
@@ -788,13 +801,13 @@ fn display_shorthand() {
fn debug_shorthand() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("my_span").with_field(
- field::mock("my_field")
+ expect::span().named("my_span").with_field(
+ expect::field("my_field")
.with_value(&debug("hello world"))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::span!(Level::TRACE, "my_span", my_field = ?"hello world");
@@ -808,14 +821,14 @@ fn debug_shorthand() {
fn both_shorthands() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("my_span").with_field(
- field::mock("display_field")
+ expect::span().named("my_span").with_field(
+ expect::field("display_field")
.with_value(&display("hello world"))
- .and(field::mock("debug_field").with_value(&debug("hello world")))
+ .and(expect::field("debug_field").with_value(&debug("hello world")))
.only(),
),
)
- .done()
+ .only()
.run_with_handle();
with_default(subscriber, || {
tracing::span!(Level::TRACE, "my_span", display_field = %"hello world", debug_field = ?"hello world");
@@ -823,3 +836,33 @@ fn both_shorthands() {
handle.assert_finished();
}
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
+fn constant_field_name() {
+ let (subscriber, handle) = subscriber::mock()
+ .new_span(
+ expect::span().named("my_span").with_field(
+ expect::field("foo")
+ .with_value(&"bar")
+ .and(expect::field("constant string").with_value(&"also works"))
+ .and(expect::field("foo.bar").with_value(&"baz"))
+ .only(),
+ ),
+ )
+ .only()
+ .run_with_handle();
+
+ with_default(subscriber, || {
+ const FOO: &str = "foo";
+ tracing::span!(
+ Level::TRACE,
+ "my_span",
+ { std::convert::identity(FOO) } = "bar",
+ { "constant string" } = "also works",
+ foo.bar = "baz",
+ );
+ });
+
+ handle.assert_finished();
+}
diff --git a/tests/subscriber.rs b/tests/subscriber.rs
index 15557c1..f676efe 100644
--- a/tests/subscriber.rs
+++ b/tests/subscriber.rs
@@ -11,8 +11,7 @@ use tracing::{
subscriber::{with_default, Interest, Subscriber},
Event, Level, Metadata,
};
-
-use tracing_mock::*;
+use tracing_mock::{expect, subscriber};
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
@@ -61,16 +60,16 @@ fn event_macros_dont_infinite_loop() {
fn boxed_subscriber() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("bar")
+ expect::span().named("foo").with_field(
+ expect::field("bar")
.with_value(&display("hello from my span"))
.only(),
),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
- .done()
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
+ .only()
.run_with_handle();
let subscriber: Box<dyn Subscriber + Send + Sync + 'static> = Box::new(subscriber);
@@ -94,20 +93,20 @@ fn arced_subscriber() {
let (subscriber, handle) = subscriber::mock()
.new_span(
- span::mock().named("foo").with_field(
- field::mock("bar")
+ expect::span().named("foo").with_field(
+ expect::field("bar")
.with_value(&display("hello from my span"))
.only(),
),
)
- .enter(span::mock().named("foo"))
- .exit(span::mock().named("foo"))
- .drop_span(span::mock().named("foo"))
+ .enter(expect::span().named("foo"))
+ .exit(expect::span().named("foo"))
+ .drop_span(expect::span().named("foo"))
.event(
- event::mock()
- .with_fields(field::mock("message").with_value(&display("hello from my event"))),
+ expect::event()
+ .with_fields(expect::field("message").with_value(&display("hello from my event"))),
)
- .done()
+ .only()
.run_with_handle();
let subscriber: Arc<dyn Subscriber + Send + Sync + 'static> = Arc::new(subscriber);