trace: Allow field names to be separated by .s (#1027)

## Motivation

In order to support conventions that add namespacing to `tokio-trace`
field names, it's necessary to accept at least one type of separator
character. Currently, the `tokio-trace` macros only accept valid Rust
identifiers, so there is no clear separator character for namespaced
conventions. See also #1018.

## Solution

This branch changes the single `ident` fragment matcher for field names
to match *one or more* `ident` fragments separated by `.` characters.

## Notes

The resulting key is still exposed to `tokio-trace-core` as a string
constant created by stringifying the dotted expression. However, if
`tokio-trace-core` were later to adopt a first class notion of
hierarchical field keys, we would be able to track that change in
`tokio-trace` as an implementation detail.

Closes #1018.
Closes #1022.

Signed-off-by: Eliza Weisman <eliza@buoyant.io>
This commit is contained in:
Eliza Weisman 2019-04-03 14:44:11 -07:00 committed by GitHub
parent 4271a9cd8d
commit 44f65afcc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 398 additions and 361 deletions

File diff suppressed because it is too large Load Diff

View File

@ -106,6 +106,26 @@ fn moved_field() {
handle.assert_finished(); handle.assert_finished();
} }
#[test]
fn dotted_field_name() {
let (subscriber, handle) = subscriber::mock()
.event(
event::mock().with_fields(
field::mock("foo.bar")
.with_value(&true)
.and(field::mock("foo.baz").with_value(&false))
.only(),
),
)
.done()
.run_with_handle();
with_default(subscriber, || {
event!(Level::INFO, foo.bar = true, foo.baz = false);
});
handle.assert_finished();
}
#[test] #[test]
fn borrowed_field() { fn borrowed_field() {
let (subscriber, handle) = subscriber::mock() let (subscriber, handle) = subscriber::mock()

View File

@ -10,146 +10,146 @@ extern crate tokio_trace;
#[test] #[test]
fn span() { fn span() {
span!(Level::DEBUG, target: "foo_events", "foo", bar = 2, baz = 3); span!(Level::DEBUG, target: "foo_events", "foo", bar.baz = 2, quux = 3);
span!(Level::DEBUG, target: "foo_events", "foo", bar = 2, baz = 4,); span!(Level::DEBUG, target: "foo_events", "foo", bar.baz = 2, quux = 4,);
span!(Level::DEBUG, target: "foo_events", "foo"); span!(Level::DEBUG, target: "foo_events", "foo");
span!(Level::DEBUG, target: "foo_events", "bar",); span!(Level::DEBUG, target: "foo_events", "bar",);
span!(Level::DEBUG, "foo", bar = 2, baz = 3); span!(Level::DEBUG, "foo", bar.baz = 2, quux = 3);
span!(Level::DEBUG, "foo", bar = 2, baz = 4,); span!(Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
span!(Level::TRACE, "foo", bar = 2, baz = 3); span!(Level::TRACE, "foo", bar.baz = 2, quux = 3);
span!(Level::TRACE, "foo", bar = 2, baz = 4,); span!(Level::TRACE, "foo", bar.baz = 2, quux = 4,);
span!(Level::TRACE, "foo"); span!(Level::TRACE, "foo");
span!(Level::TRACE, "bar",); span!(Level::TRACE, "bar",);
} }
#[test] #[test]
fn trace_span() { fn trace_span() {
trace_span!(target: "foo_events", "foo", bar = 2, baz = 3); trace_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
trace_span!(target: "foo_events", "foo", bar = 2, baz = 4,); trace_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
trace_span!(target: "foo_events", "foo"); trace_span!(target: "foo_events", "foo");
trace_span!(target: "foo_events", "bar",); trace_span!(target: "foo_events", "bar",);
trace_span!("foo", bar = 2, baz = 3); trace_span!("foo", bar.baz = 2, quux = 3);
trace_span!("foo", bar = 2, baz = 4,); trace_span!("foo", bar.baz = 2, quux = 4,);
trace_span!("bar"); trace_span!("bar");
trace_span!("bar",); trace_span!("bar",);
} }
#[test] #[test]
fn debug_span() { fn debug_span() {
debug_span!(target: "foo_events", "foo", bar = 2, baz = 3); debug_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
debug_span!(target: "foo_events", "foo", bar = 2, baz = 4,); debug_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
debug_span!(target: "foo_events", "foo"); debug_span!(target: "foo_events", "foo");
debug_span!(target: "foo_events", "bar",); debug_span!(target: "foo_events", "bar",);
debug_span!("foo", bar = 2, baz = 3); debug_span!("foo", bar.baz = 2, quux = 3);
debug_span!("foo", bar = 2, baz = 4,); debug_span!("foo", bar.baz = 2, quux = 4,);
debug_span!("bar"); debug_span!("bar");
debug_span!("bar",); debug_span!("bar",);
} }
#[test] #[test]
fn info_span() { fn info_span() {
info_span!(target: "foo_events", "foo", bar = 2, baz = 3); info_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
info_span!(target: "foo_events", "foo", bar = 2, baz = 4,); info_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
info_span!(target: "foo_events", "foo"); info_span!(target: "foo_events", "foo");
info_span!(target: "foo_events", "bar",); info_span!(target: "foo_events", "bar",);
info_span!("foo", bar = 2, baz = 3); info_span!("foo", bar.baz = 2, quux = 3);
info_span!("foo", bar = 2, baz = 4,); info_span!("foo", bar.baz = 2, quux = 4,);
info_span!("bar"); info_span!("bar");
info_span!("bar",); info_span!("bar",);
} }
#[test] #[test]
fn warn_span() { fn warn_span() {
warn_span!(target: "foo_events", "foo", bar = 2, baz = 3); warn_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
warn_span!(target: "foo_events", "foo", bar = 2, baz = 4,); warn_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
warn_span!(target: "foo_events", "foo"); warn_span!(target: "foo_events", "foo");
warn_span!(target: "foo_events", "bar",); warn_span!(target: "foo_events", "bar",);
warn_span!("foo", bar = 2, baz = 3); warn_span!("foo", bar.baz = 2, quux = 3);
warn_span!("foo", bar = 2, baz = 4,); warn_span!("foo", bar.baz = 2, quux = 4,);
warn_span!("bar"); warn_span!("bar");
warn_span!("bar",); warn_span!("bar",);
} }
#[test] #[test]
fn error_span() { fn error_span() {
error_span!(target: "foo_events", "foo", bar = 2, baz = 3); error_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
error_span!(target: "foo_events", "foo", bar = 2, baz = 4,); error_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
error_span!(target: "foo_events", "foo"); error_span!(target: "foo_events", "foo");
error_span!(target: "foo_events", "bar",); error_span!(target: "foo_events", "bar",);
error_span!("foo", bar = 2, baz = 3); error_span!("foo", bar.baz = 2, quux = 3);
error_span!("foo", bar = 2, baz = 4,); error_span!("foo", bar.baz = 2, quux = 4,);
error_span!("bar"); error_span!("bar");
error_span!("bar",); error_span!("bar",);
} }
#[test] #[test]
fn span_root() { fn span_root() {
span!(Level::DEBUG, target: "foo_events", parent: None, "foo", bar = 2, baz = 3); span!(Level::DEBUG, target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
span!(Level::DEBUG, target: "foo_events", parent: None, "foo", bar = 2, baz = 4,); span!(Level::DEBUG, target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
span!(Level::DEBUG, target: "foo_events", parent: None, "foo"); span!(Level::DEBUG, target: "foo_events", parent: None, "foo");
span!(Level::DEBUG, target: "foo_events", parent: None, "bar",); span!(Level::DEBUG, target: "foo_events", parent: None, "bar",);
span!(Level::TRACE, parent: None, "foo", bar = 2, baz = 3); span!(Level::TRACE, parent: None, "foo", bar.baz = 2, quux = 3);
span!(Level::TRACE, parent: None, "foo", bar = 2, baz = 4,); span!(Level::TRACE, parent: None, "foo", bar.baz = 2, quux = 4,);
span!(Level::TRACE, parent: None, "foo"); span!(Level::TRACE, parent: None, "foo");
span!(Level::TRACE, parent: None, "bar",); span!(Level::TRACE, parent: None, "bar",);
} }
#[test] #[test]
fn trace_span_root() { fn trace_span_root() {
trace_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 3); trace_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
trace_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 4,); 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, "foo");
trace_span!(target: "foo_events", parent: None, "bar",); trace_span!(target: "foo_events", parent: None, "bar",);
trace_span!(parent: None, "foo", bar = 2, baz = 3); trace_span!(parent: None, "foo", bar.baz = 2, quux = 3);
trace_span!(parent: None, "foo", bar = 2, baz = 4,); trace_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
trace_span!(parent: None, "foo"); trace_span!(parent: None, "foo");
trace_span!(parent: None, "bar",); trace_span!(parent: None, "bar",);
} }
#[test] #[test]
fn debug_span_root() { fn debug_span_root() {
debug_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 3); debug_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
debug_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 4,); 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, "foo");
debug_span!(target: "foo_events", parent: None, "bar",); debug_span!(target: "foo_events", parent: None, "bar",);
debug_span!(parent: None, "foo", bar = 2, baz = 3); debug_span!(parent: None, "foo", bar.baz = 2, quux = 3);
debug_span!(parent: None, "foo", bar = 2, baz = 4,); debug_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
debug_span!(parent: None, "foo"); debug_span!(parent: None, "foo");
debug_span!(parent: None, "bar",); debug_span!(parent: None, "bar",);
} }
#[test] #[test]
fn info_span_root() { fn info_span_root() {
info_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 3); info_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
info_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 4,); 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, "foo");
info_span!(target: "foo_events", parent: None, "bar",); info_span!(target: "foo_events", parent: None, "bar",);
info_span!(parent: None, "foo", bar = 2, baz = 3); info_span!(parent: None, "foo", bar.baz = 2, quux = 3);
info_span!(parent: None, "foo", bar = 2, baz = 4,); info_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
info_span!(parent: None, "foo"); info_span!(parent: None, "foo");
info_span!(parent: None, "bar",); info_span!(parent: None, "bar",);
} }
#[test] #[test]
fn warn_span_root() { fn warn_span_root() {
warn_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 3); warn_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
warn_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 4,); 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, "foo");
warn_span!(target: "foo_events", parent: None, "bar",); warn_span!(target: "foo_events", parent: None, "bar",);
warn_span!(parent: None, "foo", bar = 2, baz = 3); warn_span!(parent: None, "foo", bar.baz = 2, quux = 3);
warn_span!(parent: None, "foo", bar = 2, baz = 4,); warn_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
warn_span!(parent: None, "foo"); warn_span!(parent: None, "foo");
warn_span!(parent: None, "bar",); warn_span!(parent: None, "bar",);
} }
#[test] #[test]
fn error_span_root() { fn error_span_root() {
error_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 3); error_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
error_span!(target: "foo_events", parent: None, "foo", bar = 2, baz = 4,); 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, "foo");
error_span!(target: "foo_events", parent: None, "bar",); error_span!(target: "foo_events", parent: None, "bar",);
error_span!(parent: None, "foo", bar = 2, baz = 3); error_span!(parent: None, "foo", bar.baz = 2, quux = 3);
error_span!(parent: None, "foo", bar = 2, baz = 4,); error_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
error_span!(parent: None, "foo"); error_span!(parent: None, "foo");
error_span!(parent: None, "bar",); error_span!(parent: None, "bar",);
} }
@ -157,13 +157,13 @@ fn error_span_root() {
#[test] #[test]
fn span_with_parent() { fn span_with_parent() {
let p = span!(Level::TRACE, "im_a_parent!"); let p = span!(Level::TRACE, "im_a_parent!");
span!(Level::DEBUG, target: "foo_events", parent: &p, "foo", bar = 2, baz = 3); span!(Level::DEBUG, target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
span!(Level::DEBUG, target: "foo_events", parent: &p, "foo", bar = 2, baz = 4,); span!(Level::DEBUG, target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
span!(Level::DEBUG, target: "foo_events", parent: &p, "foo"); span!(Level::DEBUG, target: "foo_events", parent: &p, "foo");
span!(Level::DEBUG, target: "foo_events", parent: &p, "bar",); span!(Level::DEBUG, target: "foo_events", parent: &p, "bar",);
span!(Level::DEBUG, parent: &p, "foo", bar = 2, baz = 3); span!(Level::DEBUG, parent: &p, "foo", bar.baz = 2, quux = 3);
span!(Level::DEBUG, parent: &p, "foo", bar = 2, baz = 4,); span!(Level::DEBUG, parent: &p, "foo", bar.baz = 2, quux = 4,);
span!(Level::DEBUG, parent: &p, "foo"); span!(Level::DEBUG, parent: &p, "foo");
span!(Level::DEBUG, parent: &p, "bar",); span!(Level::DEBUG, parent: &p, "bar",);
@ -172,13 +172,13 @@ fn span_with_parent() {
#[test] #[test]
fn trace_span_with_parent() { fn trace_span_with_parent() {
let p = span!(Level::TRACE, "im_a_parent!"); let p = span!(Level::TRACE, "im_a_parent!");
trace_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 3); trace_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
trace_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 4,); trace_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
trace_span!(target: "foo_events", parent: &p, "foo"); trace_span!(target: "foo_events", parent: &p, "foo");
trace_span!(target: "foo_events", parent: &p, "bar",); trace_span!(target: "foo_events", parent: &p, "bar",);
trace_span!(parent: &p, "foo", bar = 2, baz = 3); trace_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
trace_span!(parent: &p, "foo", bar = 2, baz = 4,); trace_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);
trace_span!(parent: &p, "foo"); trace_span!(parent: &p, "foo");
trace_span!(parent: &p, "bar",); trace_span!(parent: &p, "bar",);
@ -187,13 +187,13 @@ fn trace_span_with_parent() {
#[test] #[test]
fn debug_span_with_parent() { fn debug_span_with_parent() {
let p = span!(Level::TRACE, "im_a_parent!"); let p = span!(Level::TRACE, "im_a_parent!");
debug_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 3); debug_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
debug_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 4,); debug_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
debug_span!(target: "foo_events", parent: &p, "foo"); debug_span!(target: "foo_events", parent: &p, "foo");
debug_span!(target: "foo_events", parent: &p, "bar",); debug_span!(target: "foo_events", parent: &p, "bar",);
debug_span!(parent: &p, "foo", bar = 2, baz = 3); debug_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
debug_span!(parent: &p, "foo", bar = 2, baz = 4,); debug_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);
debug_span!(parent: &p, "foo"); debug_span!(parent: &p, "foo");
debug_span!(parent: &p, "bar",); debug_span!(parent: &p, "bar",);
@ -202,13 +202,13 @@ fn debug_span_with_parent() {
#[test] #[test]
fn info_span_with_parent() { fn info_span_with_parent() {
let p = span!(Level::TRACE, "im_a_parent!"); let p = span!(Level::TRACE, "im_a_parent!");
info_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 3); info_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
info_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 4,); info_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
info_span!(target: "foo_events", parent: &p, "foo"); info_span!(target: "foo_events", parent: &p, "foo");
info_span!(target: "foo_events", parent: &p, "bar",); info_span!(target: "foo_events", parent: &p, "bar",);
info_span!(parent: &p, "foo", bar = 2, baz = 3); info_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
info_span!(parent: &p, "foo", bar = 2, baz = 4,); info_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);
info_span!(parent: &p, "foo"); info_span!(parent: &p, "foo");
info_span!(parent: &p, "bar",); info_span!(parent: &p, "bar",);
@ -217,13 +217,13 @@ fn info_span_with_parent() {
#[test] #[test]
fn warn_span_with_parent() { fn warn_span_with_parent() {
let p = span!(Level::TRACE, "im_a_parent!"); let p = span!(Level::TRACE, "im_a_parent!");
warn_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 3); warn_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
warn_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 4,); warn_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
warn_span!(target: "foo_events", parent: &p, "foo"); warn_span!(target: "foo_events", parent: &p, "foo");
warn_span!(target: "foo_events", parent: &p, "bar",); warn_span!(target: "foo_events", parent: &p, "bar",);
warn_span!(parent: &p, "foo", bar = 2, baz = 3); warn_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
warn_span!(parent: &p, "foo", bar = 2, baz = 4,); warn_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);
warn_span!(parent: &p, "foo"); warn_span!(parent: &p, "foo");
warn_span!(parent: &p, "bar",); warn_span!(parent: &p, "bar",);
@ -232,13 +232,13 @@ fn warn_span_with_parent() {
#[test] #[test]
fn error_span_with_parent() { fn error_span_with_parent() {
let p = span!(Level::TRACE, "im_a_parent!"); let p = span!(Level::TRACE, "im_a_parent!");
error_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 3); error_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
error_span!(target: "foo_events", parent: &p, "foo", bar = 2, baz = 4,); error_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
error_span!(target: "foo_events", parent: &p, "foo"); error_span!(target: "foo_events", parent: &p, "foo");
error_span!(target: "foo_events", parent: &p, "bar",); error_span!(target: "foo_events", parent: &p, "bar",);
error_span!(parent: &p, "foo", bar = 2, baz = 3); error_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
error_span!(parent: &p, "foo", bar = 2, baz = 4,); error_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);
error_span!(parent: &p, "foo"); error_span!(parent: &p, "foo");
error_span!(parent: &p, "bar",); error_span!(parent: &p, "bar",);
@ -246,122 +246,122 @@ fn error_span_with_parent() {
#[test] #[test]
fn event() { fn event() {
event!(Level::DEBUG, foo = 3, bar = 2, baz = false); event!(Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
event!(Level::DEBUG, foo = 3, bar = 3,); event!(Level::DEBUG, foo = 3, bar.baz = 3,);
event!(Level::DEBUG, "foo"); event!(Level::DEBUG, "foo");
event!(Level::DEBUG, "foo: {}", 3); event!(Level::DEBUG, "foo: {}", 3);
event!(Level::DEBUG, { foo = 3, bar = 80 }, "baz"); event!(Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
event!(Level::DEBUG, { foo = 2, bar = 79 }, "baz {:?}", true); event!(Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
event!(Level::DEBUG, { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); event!(Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
event!(Level::DEBUG, { foo = 2, bar = 78, }, "baz"); event!(Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
event!(target: "foo_events", Level::DEBUG, foo = 3, bar = 2, baz = false); event!(target: "foo_events", Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
event!(target: "foo_events", Level::DEBUG, foo = 3, bar = 3,); event!(target: "foo_events", Level::DEBUG, foo = 3, bar.baz = 3,);
event!(target: "foo_events", Level::DEBUG, "foo"); event!(target: "foo_events", Level::DEBUG, "foo");
event!(target: "foo_events", Level::DEBUG, "foo: {}", 3); event!(target: "foo_events", Level::DEBUG, "foo: {}", 3);
event!(target: "foo_events", Level::DEBUG, { foo = 3, bar = 80 }, "baz"); event!(target: "foo_events", Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
event!(target: "foo_events", Level::DEBUG, { foo = 2, bar = 79 }, "baz {:?}", true); event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
event!(target: "foo_events", Level::DEBUG, { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
event!(target: "foo_events", Level::DEBUG, { foo = 2, bar = 78, }, "baz"); event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
} }
#[test] #[test]
fn trace() { fn trace() {
trace!(foo = 3, bar = 2, baz = false); trace!(foo = 3, bar.baz = 2, quux = false);
trace!(foo = 3, bar = 3,); trace!(foo = 3, bar.baz = 3,);
trace!("foo"); trace!("foo");
trace!("foo: {}", 3); trace!("foo: {}", 3);
trace!({ foo = 3, bar = 80 }, "baz"); trace!({ foo = 3, bar.baz = 80 }, "quux");
trace!({ foo = 2, bar = 79 }, "baz {:?}", true); trace!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
trace!({ foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); trace!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
trace!({ foo = 2, bar = 78, }, "baz"); trace!({ foo = 2, bar.baz = 78, }, "quux");
trace!(target: "foo_events", foo = 3, bar = 2, baz = false); trace!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
trace!(target: "foo_events", foo = 3, bar = 3,); trace!(target: "foo_events", foo = 3, bar.baz = 3,);
trace!(target: "foo_events", "foo"); trace!(target: "foo_events", "foo");
trace!(target: "foo_events", "foo: {}", 3); trace!(target: "foo_events", "foo: {}", 3);
trace!(target: "foo_events", { foo = 3, bar = 80 }, "baz"); trace!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
trace!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}", true); trace!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
trace!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); trace!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
trace!(target: "foo_events", { foo = 2, bar = 78, }, "baz"); trace!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
} }
#[test] #[test]
fn debug() { fn debug() {
debug!(foo = 3, bar = 2, baz = false); debug!(foo = 3, bar.baz = 2, quux = false);
debug!(foo = 3, bar = 3,); debug!(foo = 3, bar.baz = 3,);
debug!("foo"); debug!("foo");
debug!("foo: {}", 3); debug!("foo: {}", 3);
debug!({ foo = 3, bar = 80 }, "baz"); debug!({ foo = 3, bar.baz = 80 }, "quux");
debug!({ foo = 2, bar = 79 }, "baz {:?}", true); debug!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
debug!({ foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); debug!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
debug!({ foo = 2, bar = 78, }, "baz"); debug!({ foo = 2, bar.baz = 78, }, "quux");
debug!(target: "foo_events", foo = 3, bar = 2, baz = false); debug!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
debug!(target: "foo_events", foo = 3, bar = 3,); debug!(target: "foo_events", foo = 3, bar.baz = 3,);
debug!(target: "foo_events", "foo"); debug!(target: "foo_events", "foo");
debug!(target: "foo_events", "foo: {}", 3); debug!(target: "foo_events", "foo: {}", 3);
debug!(target: "foo_events", { foo = 3, bar = 80 }, "baz"); debug!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
debug!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}", true); debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
debug!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
debug!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
debug!(target: "foo_events", { foo = 2, bar = 78, }, "baz"); debug!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
} }
#[test] #[test]
fn info() { fn info() {
info!(foo = 3, bar = 2, baz = false); info!(foo = 3, bar.baz = 2, quux = false);
info!(foo = 3, bar = 3,); info!(foo = 3, bar.baz = 3,);
info!("foo"); info!("foo");
info!("foo: {}", 3); info!("foo: {}", 3);
info!({ foo = 3, bar = 80 }, "baz"); info!({ foo = 3, bar.baz = 80 }, "quux");
info!({ foo = 2, bar = 79 }, "baz {:?}", true); info!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
info!({ foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); info!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
info!({ foo = 2, bar = 78, }, "baz"); info!({ foo = 2, bar.baz = 78, }, "quux");
info!(target: "foo_events", foo = 3, bar = 2, baz = false); info!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
info!(target: "foo_events", foo = 3, bar = 3,); info!(target: "foo_events", foo = 3, bar.baz = 3,);
info!(target: "foo_events", "foo"); info!(target: "foo_events", "foo");
info!(target: "foo_events", "foo: {}", 3); info!(target: "foo_events", "foo: {}", 3);
info!(target: "foo_events", { foo = 3, bar = 80 }, "baz"); info!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
info!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}", true); info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
info!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
info!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
info!(target: "foo_events", { foo = 2, bar = 78, }, "baz"); info!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
} }
#[test] #[test]
fn warn() { fn warn() {
warn!(foo = 3, bar = 2, baz = false); warn!(foo = 3, bar.baz = 2, quux = false);
warn!(foo = 3, bar = 3,); warn!(foo = 3, bar.baz = 3,);
warn!("foo"); warn!("foo");
warn!("foo: {}", 3); warn!("foo: {}", 3);
warn!({ foo = 3, bar = 80 }, "baz"); warn!({ foo = 3, bar.baz = 80 }, "quux");
warn!({ foo = 2, bar = 79 }, "baz {:?}", true); warn!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
warn!({ foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); warn!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
warn!({ foo = 2, bar = 78 }, "baz"); warn!({ foo = 2, bar.baz = 78 }, "quux");
warn!(target: "foo_events", foo = 3, bar = 2, baz = false); warn!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
warn!(target: "foo_events", foo = 3, bar = 3,); warn!(target: "foo_events", foo = 3, bar.baz = 3,);
warn!(target: "foo_events", "foo"); warn!(target: "foo_events", "foo");
warn!(target: "foo_events", "foo: {}", 3); warn!(target: "foo_events", "foo: {}", 3);
warn!(target: "foo_events", { foo = 3, bar = 80 }, "baz"); warn!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
warn!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}", true); warn!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
warn!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); warn!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
warn!(target: "foo_events", { foo = 2, bar = 78, }, "baz"); warn!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
} }
#[test] #[test]
fn error() { fn error() {
error!(foo = 3, bar = 2, baz = false); error!(foo = 3, bar.baz = 2, quux = false);
error!(foo = 3, bar = 3,); error!(foo = 3, bar.baz = 3,);
error!("foo"); error!("foo");
error!("foo: {}", 3); error!("foo: {}", 3);
error!({ foo = 3, bar = 80 }, "baz"); error!({ foo = 3, bar.baz = 80 }, "quux");
error!({ foo = 2, bar = 79 }, "baz {:?}", true); error!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
error!({ foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); error!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
error!({ foo = 2, bar = 78, }, "baz"); error!({ foo = 2, bar.baz = 78, }, "quux");
error!(target: "foo_events", foo = 3, bar = 2, baz = false); error!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
error!(target: "foo_events", foo = 3, bar = 3,); error!(target: "foo_events", foo = 3, bar.baz = 3,);
error!(target: "foo_events", "foo"); error!(target: "foo_events", "foo");
error!(target: "foo_events", "foo: {}", 3); error!(target: "foo_events", "foo: {}", 3);
error!(target: "foo_events", { foo = 3, bar = 80 }, "baz"); error!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
error!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}", true); error!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
error!(target: "foo_events", { foo = 2, bar = 79 }, "baz {:?}, {quux}", true, quux = false); error!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
error!(target: "foo_events", { foo = 2, bar = 78, }, "baz"); error!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
} }

View File

@ -278,6 +278,23 @@ fn moved_field() {
handle.assert_finished(); handle.assert_finished();
} }
#[test]
fn dotted_field_name() {
let (subscriber, handle) = subscriber::mock()
.new_span(
span::mock()
.named("foo")
.with_field(field::mock("fields.bar").with_value(&true).only()),
)
.done()
.run_with_handle();
with_default(subscriber, || {
span!(Level::TRACE, "foo", fields.bar = true);
});
handle.assert_finished();
}
#[test] #[test]
fn borrowed_field() { fn borrowed_field() {
let (subscriber, handle) = subscriber::mock() let (subscriber, handle) = subscriber::mock()