Simplify common case of immediately entering the span
This PR allows the following API:

```
let _guard = tracing::span!("foo").entered();
```

See https://github.com/tokio-rs/tracing/issues/zc for an extended
discussion.


This probably needs better docs, so that the people know that this API exists, but I would prefer to avoid further polishing the docs myself :)

Closes #1246
Closes #192
Closes #79
I am currently instrumenting [`tokio-tower`](https://github.com/tower-rs/tokio-tower), and am running into a use-case that I don't think `tokio-trace` really supports. I want to trace the full path of a given request through the system, so the request is given its own `Span`. That `Span` should be entered once when the request is first issued, and not be left again until the request eventually resolves, potentially much later and in some other context.

More concretely, the flow looks a little like this:

 - User wants to issue a request, and passes it to the client library.
 - The library creates a `oneshot` channel tx/rx pair and a `Span`.
 - The library enters the `Span`.
 - The library sends all these three over a channel to a spawned worker.
 - The worker does a bunch of asynchronous work, including handling other requests.
   As part of doing so, it also emits events related to each request's `Span` (if any).
 - Eventually, the request finishes, and a response is sent on the `oneshot` channel.
 - The library emits a final event for the request's `Span` marking its completion, and then leaves the `Span`.

#1109 is need to allow the worker to explicitly log events as part of a request's `Span`, since it is not executing "in the context of" any given `Span`. Beyond that however, there is no way to have the `Span::enter` and `Span::leave` as disjoint as this flow requires. `Span::in_scope` immediately leaves the span's scope, and `Span::enter` returns a guard that is tied to the lifetime of the `Span`.

There are a couple of options here as far as I can see:

 - Make `Span::enter` return an owned guard that increments the ref count of the `Span`. This has the upside of leaving the API simple, but increases the cost of `Span::enter` for everyone, even when it is not necessary.
 - Add `Span::enter_owned` (under some other name probably) alongside `Span::enter`, and have that return an owned guard which increments the ref count. This still ensures that the `Span` is entered and left correctly and isolates the cost to when it is needed, but complicates the API.
 - Add `Span::emit_enter` and `Span::emit_leave` which emit the `Span`'s "enter" and "leave" events without returning a guard. This API can be mis-used so that multiple enter/leaves are emitted, but would be more efficient than incrementing the ref count for a guard.
 - Add `Span::guard` which consumes the `Span` and returns an owned guard. This is probably the nicest API, as it cannot be mis-used, doesn't increment the ref count, and adds only a single API method.
trace: Non-contextual span enter/leave
diff --git a/tracing/src/span.rs b/tracing/src/span.rs
index 0a86ca848f..9ee630943a 100644
--- a/tracing/src/span.rs
+++ b/tracing/src/span.rs
@@ -322,6 +322,8 @@ use core::{
     cmp, fmt,
     hash::{Hash, Hasher},
     marker::PhantomData,
+    mem,
+    ops::Deref,
 };
 
 /// Trait implemented by types which have a span `Id`.
@@ -379,7 +381,36 @@ pub(crate) struct Inner {
 #[must_use = "once a span has been entered, it should be exited"]
 pub struct Entered<'a> {
     span: &'a Span,
-    _not_send: PhantomData<*mut ()>,
+
+    /// ```compile_fail
+    /// use tracing::span::*;
+    /// trait AssertSend: Send {}
+    ///
+    /// impl AssertSend for Entered<'_> {}
+    /// ```
+    _not_send: PhantomNotSend,
+}
+
+/// An owned version of [`Entered`], a guard representing a span which has been
+/// entered and is currently executing.
+///
+/// When the guard is dropped, the span will be exited.
+///
+/// This is returned by the [`Span::entered`] function.
+///
+/// [`Span::entered`]: super::Span::entered()
+#[derive(Debug)]
+#[must_use = "once a span has been entered, it should be exited"]
+pub struct EnteredSpan {
+    span: Span,
+
+    /// ```compile_fail
+    /// use tracing::span::*;
+    /// trait AssertSend: Send {}
+    ///
+    /// impl AssertSend for EnteredSpan {}
+    /// ```
+    _not_send: PhantomNotSend,
 }
 
 /// `log` target for all span lifecycle (creation/enter/exit/close) records.
@@ -757,8 +788,135 @@ impl Span {
     /// [`Collect::enter`]: super::collect::Collect::enter()
     /// [`Collect::exit`]: super::collect::Collect::exit()
     /// [`Id`]: super::Id
+    #[inline]
     pub fn enter(&self) -> Entered<'_> {
-        if let Some(ref inner) = self.inner.as_ref() {
+        self.do_enter();
+        Entered {
+            span: self,
+            _not_send: PhantomNotSend,
+        }
+    }
+
+    /// Enters this span, consuming it and returning a [guard][`EnteredSpan`]
+    /// that will exit the span when dropped.
+    ///
+    /// If this span is enabled by the current collector, then this function will
+    /// call [`Collect::enter`] with the span's [`Id`], and dropping the guard
+    /// will call [`Collect::exit`]. If the span is disabled, this does
+    /// nothing.
+    ///
+    /// This is similar to the [`Span::enter`] method, except that it moves the
+    /// span by value into the returned guard, rather than borrowing it.
+    /// Therefore, this method can be used to create and enter a span in a
+    /// single expression, without requiring a `let`-binding. For example:
+    ///
+    /// ```
+    /// # use tracing::info_span;
+    /// let _span = info_span!("something_interesting").entered();
+    /// ```
+    /// rather than:
+    /// ```
+    /// # use tracing::info_span;
+    /// let span = info_span!("something_interesting");
+    /// let _e = span.enter();
+    /// ```
+    ///
+    /// Furthermore, `entered` may be used when the span must be stored in some
+    /// other struct or be passed to a function while remaining entered.
+    ///
+    /// <div class="information">
+    ///     <div class="tooltip ignore" style="">ⓘ<span class="tooltiptext">Note</span></div>
+    /// </div>
+    /// <div class="example-wrap" style="display:inline-block">
+    /// <pre class="ignore" style="white-space:normal;font:inherit;">
+    ///
+    /// **Note**: The returned [`EnteredSpan`] guard does not
+    /// implement `Send`. Dropping the guard will exit *this* span,
+    /// and if the guard is sent to another thread and dropped there, that thread may
+    /// never have entered this span. Thus, `EnteredSpan`s should not be sent
+    /// between threads.
+    ///
+    /// </pre></div>
+    ///
+    /// **Warning**: in asynchronous code that uses [async/await syntax][syntax],
+    /// [`Span::entered`] should be used very carefully or avoided entirely. Holding
+    /// the drop guard returned by `Span::entered` across `.await` points will
+    /// result in incorrect traces. See the documentation for the
+    /// [`Span::enter`] method for details.
+    ///
+    /// [syntax]: https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html
+    ///
+    /// # Examples
+    ///
+    /// The returned guard can be [explicitly exited][EnteredSpan::exit],
+    /// returning the un-entered span:
+    ///
+    /// ```
+    /// # use tracing::{Level, span};
+    /// let span = span!(Level::INFO, "doing_something").entered();
+    ///
+    /// // code here is within the span
+    ///
+    /// // explicitly exit the span, returning it
+    /// let span = span.exit();
+    ///
+    /// // code here is no longer within the span
+    ///
+    /// // enter the span again
+    /// let span = span.entered();
+    ///
+    /// // now we are inside the span once again
+    /// ```
+    ///
+    /// Guards need not be explicitly dropped:
+    ///
+    /// ```
+    /// # use tracing::trace_span;
+    /// fn my_function() -> String {
+    ///     // enter a span for the duration of this function.
+    ///     let span = trace_span!("my_function").entered();
+    ///
+    ///     // anything happening in functions we call is still inside the span...
+    ///     my_other_function();
+    ///
+    ///     // returning from the function drops the guard, exiting the span.
+    ///     return "Hello world".to_owned();
+    /// }
+    ///
+    /// fn my_other_function() {
+    ///     // ...
+    /// }
+    /// ```
+    ///
+    /// Since the [`EnteredSpan`] guard can dereference to the [`Span`] itself,
+    /// the span may still be accessed while entered. For example:
+    ///
+    /// ```rust
+    /// # use tracing::info_span;
+    /// use tracing::field;
+    ///
+    /// // create the span with an empty field, and enter it.
+    /// let span = info_span!("my_span", some_field = field::Empty).entered();
+    ///
+    /// // we can still record a value for the field while the span is entered.
+    /// span.record("some_field", &"hello world!");
+    /// ```
+    ///
+    /// [`Collect::enter`]: super::collect::Collect::enter()
+    /// [`Collect::exit`]: super::collect::Collect::exit()
+    /// [`Id`]: super::Id
+    #[inline]
+    pub fn entered(self) -> EnteredSpan {
+        self.do_enter();
+        EnteredSpan {
+            span: self,
+            _not_send: PhantomNotSend,
+        }
+    }
+
+    #[inline]
+    fn do_enter(&self) {
+        if let Some(inner) = self.inner.as_ref() {
             inner.collector.enter(&inner.id);
         }
 
@@ -767,11 +925,23 @@ impl Span {
                 self.log(ACTIVITY_LOG_TARGET, log::Level::Trace, format_args!("-> {}", meta.name()));
             }
         }}
+    }
 
-        Entered {
-            span: self,
-            _not_send: PhantomData,
+    // Called from [`Entered`] and [`EnteredSpan`] drops.
+    //
+    // Running this behaviour on drop rather than with an explicit function
+    // call means that spans may still be exited when unwinding.
+    #[inline]
+    fn do_exit(&self) {
+        if let Some(inner) = self.inner.as_ref() {
+            inner.collector.exit(&inner.id);
         }
+
+        if_log_enabled! { crate::Level::TRACE, {
+            if let Some(ref _meta) = self.meta {
+                self.log(ACTIVITY_LOG_TARGET, log::Level::Trace, format_args!("<- {}", _meta.name()));
+            }
+        }}
     }
 
     /// Executes the given function in the context of this span.
@@ -1223,42 +1393,65 @@ impl Clone for Inner {
 
 // ===== impl Entered =====
 
-/// # Safety
-///
-/// Technically, `Entered` _can_ implement both `Send` *and* `Sync` safely. It
-/// doesn't, because it has a `PhantomData<*mut ()>` field, specifically added
-/// in order to make it `!Send`.
+impl EnteredSpan {
+    /// Exits this span, returning the underlying [`Span`].
+    #[inline]
+    pub fn exit(mut self) -> Span {
+        // One does not simply move out of a struct with `Drop`.
+        let span = mem::replace(&mut self.span, Span::none());
+        span.do_exit();
+        span
+    }
+}
+
+impl Deref for EnteredSpan {
+    type Target = Span;
+
+    #[inline]
+    fn deref(&self) -> &Span {
+        &self.span
+    }
+}
+
+impl<'a> Drop for Entered<'a> {
+    #[inline]
+    fn drop(&mut self) {
+        self.span.do_exit()
+    }
+}
+
+impl Drop for EnteredSpan {
+    #[inline]
+    fn drop(&mut self) {
+        self.span.do_exit()
+    }
+}
+
+/// Technically, `Entered` (or `EnteredSpan`) _can_ implement both `Send` *and*
+/// `Sync` safely. It doesn't, because it has a `PhantomNotSend` field,
+/// specifically added in order to make it `!Send`.
 ///
 /// Sending an `Entered` guard between threads cannot cause memory unsafety.
 /// However, it *would* result in incorrect behavior, so we add a
-/// `PhantomData<*mut ()>` to prevent it from being sent between threads. This
-/// is because it must be *dropped* on the same thread that it was created;
+/// `PhantomNotSend` to prevent it from being sent between threads. This is
+/// because it must be *dropped* on the same thread that it was created;
 /// otherwise, the span will never be exited on the thread where it was entered,
 /// and it will attempt to exit the span on a thread that may never have entered
 /// it. However, we still want them to be `Sync` so that a struct holding an
 /// `Entered` guard can be `Sync`.
 ///
 /// Thus, this is totally safe.
-unsafe impl<'a> Sync for Entered<'a> {}
-
-impl<'a> Drop for Entered<'a> {
-    #[inline]
-    fn drop(&mut self) {
-        // Dropping the guard exits the span.
-        //
-        // Running this behaviour on drop rather than with an explicit function
-        // call means that spans may still be exited when unwinding.
-        if let Some(inner) = self.span.inner.as_ref() {
-            inner.collector.exit(&inner.id);
-        }
-
-        if let Some(ref _meta) = self.span.meta {
-            if_log_enabled! { crate::Level::TRACE, {
-                self.span.log(ACTIVITY_LOG_TARGET, log::Level::Trace, format_args!("<- {}", _meta.name()));
-            }}
-        }
-    }
+#[derive(Debug)]
+struct PhantomNotSend {
+    ghost: PhantomData<*mut ()>,
 }
+#[allow(non_upper_case_globals)]
+const PhantomNotSend: PhantomNotSend = PhantomNotSend { ghost: PhantomData };
+
+/// # Safety
+///
+/// Trivially safe, as `PhantomNotSend` doesn't have any API.
+unsafe impl Sync for PhantomNotSend {}
 
 #[cfg(feature = "log")]
 struct FmtValues<'a>(&'a Record<'a>);
@@ -1301,4 +1494,6 @@ mod test {
 
     trait AssertSync: Sync {}
     impl AssertSync for Span {}
+    impl AssertSync for Entered<'_> {}
+    impl AssertSync for EnteredSpan {}
 }

diff --git a/tracing/tests/span.rs b/tracing/tests/span.rs
index 3443342868..3f09ea5f1e 100644
--- a/tracing/tests/span.rs
+++ b/tracing/tests/span.rs
@@ -297,6 +297,44 @@ fn enter() {
     handle.assert_finished();
 }
 
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
+fn entered() {
+    let (collector, handle) = collector::mock()
+        .enter(span::mock().named("foo"))
+        .event(event::mock())
+        .exit(span::mock().named("foo"))
+        .drop_span(span::mock().named("foo"))
+        .done()
+        .run_with_handle();
+    with_default(collector, || {
+        let _span = span!(Level::TRACE, "foo").entered();
+        debug!("dropping guard...");
+    });
+
+    handle.assert_finished();
+}
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
+#[test]
+fn entered_api() {
+    let (collector, handle) = collector::mock()
+        .enter(span::mock().named("foo"))
+        .event(event::mock())
+        .exit(span::mock().named("foo"))
+        .drop_span(span::mock().named("foo"))
+        .done()
+        .run_with_handle();
+    with_default(collector, || {
+        let span = span!(Level::TRACE, "foo").entered();
+        let _derefs_to_span = span.id();
+        debug!("exiting span...");
+        let _: Span = span.exit();
+    });
+
+    handle.assert_finished();
+}
+
 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
 #[test]
 fn moved_field() {

{"event_outside_of_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "entered": {"run": "NONE", "test": "NONE", "fix": "PASS"}, "handles_to_different_spans_with_the_same_metadata_are_not_equal": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "record_new_value_for_field": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "string_message_without_delims": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "non_blocking::test::multi_threaded_writes": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_hourly_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_daily_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "one_with_everything": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_without_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "enter": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_round_date_hourly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_child_at_levels": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "spans_always_go_to_the_subscriber_that_tagged_them": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_rotation_path_daily": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_round_date_minutely": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_never_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_macros_dont_infinite_loop": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dropping_a_span_calls_drop_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "prefixed_span_macros": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "moved_field": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_join_date_never": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "locals_with_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "display_shorthand": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_closes_after_event": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_never": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_daily": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "multiple_max_level_hints": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "borrow_val_events": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dotted_field_name": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "field_shorthand_only": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "move_field_out_of_struct": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "nonzeroi32_event_without_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "handles_to_different_spans_are_not_equal": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_rotation_path_minutely": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "borrow_val_spans": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_child_regardless_of_ctx": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "locals_no_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "borrowed_field": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_rotation_path_hourly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "both_shorthands": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "new_span_with_target_and_log_level": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "record_new_values_for_fields": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_round_date_daily": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_minutely": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_root_span_is_root_regardless_of_ctx": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "max_level_hints": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "message_without_delims": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "spans_always_go_to_the_subscriber_that_tagged_them_even_across_threads": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filter_caching_is_lexically_scoped": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "handles_to_the_same_span_are_equal": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_closes_when_exited": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "clone_and_drop_span_always_go_to_the_subscriber_that_tagged_the_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "prefixed_event_macros": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_with_async_trait_and_fields_expressions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "entered_api": {"run": "NONE", "test": "NONE", "fix": "PASS"}, "events_dont_leak": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "new_span_after_event": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_shorthand": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_with_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_root_span_is_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_nested": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_only_enters_for_polls": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_child": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "contextual_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_with_non_rust_symbol": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filters_are_reevaluated_for_different_call_sites": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "callsite_macro_api": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_with_async_trait_and_fields_expressions_with_generic_parameter": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_hourly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_minutely_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filters_are_not_reevaluated_for_the_same_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "contextual_child": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "wrapping_event_without_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "spans_dont_leak": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "drop_span_when_exiting_dispatchers_context": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "cloning_a_span_calls_clone_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "non_blocking::test::backpressure_exerted": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"event_outside_of_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "entered": {"run": "NONE", "test": "NONE", "fix": "PASS"}, "handles_to_different_spans_with_the_same_metadata_are_not_equal": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "record_new_value_for_field": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "string_message_without_delims": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "non_blocking::test::multi_threaded_writes": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_hourly_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_daily_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "one_with_everything": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_without_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "enter": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_round_date_hourly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_child_at_levels": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "spans_always_go_to_the_subscriber_that_tagged_them": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_rotation_path_daily": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_round_date_minutely": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_never_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_macros_dont_infinite_loop": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dropping_a_span_calls_drop_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "prefixed_span_macros": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "moved_field": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_join_date_never": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "locals_with_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "display_shorthand": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_closes_after_event": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_never": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_daily": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "multiple_max_level_hints": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "borrow_val_events": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "dotted_field_name": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "field_shorthand_only": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "move_field_out_of_struct": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "nonzeroi32_event_without_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "handles_to_different_spans_are_not_equal": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_rotation_path_minutely": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "borrow_val_spans": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_child_regardless_of_ctx": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "locals_no_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "borrowed_field": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_rotation_path_hourly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "both_shorthands": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "new_span_with_target_and_log_level": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "record_new_values_for_fields": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_round_date_daily": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "info_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_minutely": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_root_span_is_root_regardless_of_ctx": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "max_level_hints": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "message_without_delims": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "spans_always_go_to_the_subscriber_that_tagged_them_even_across_threads": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filter_caching_is_lexically_scoped": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "handles_to_the_same_span_are_equal": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_closes_when_exited": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "clone_and_drop_span_always_go_to_the_subscriber_that_tagged_the_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "prefixed_event_macros": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_with_async_trait_and_fields_expressions": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "entered_api": {"run": "NONE", "test": "NONE", "fix": "PASS"}, "events_dont_leak": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "new_span_after_event": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_shorthand": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_with_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_root_span_is_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_nested": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_only_enters_for_polls": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "event_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "explicit_child": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "contextual_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "span_with_non_rust_symbol": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filters_are_reevaluated_for_different_call_sites": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "callsite_macro_api": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "async_fn_with_async_trait_and_fields_expressions_with_generic_parameter": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::test_next_date_hourly": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "rolling::test::write_minutely_log": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "filters_are_not_reevaluated_for_the_same_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "contextual_child": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "wrapping_event_without_message": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "spans_dont_leak": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "error_span_with_parent": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "drop_span_when_exiting_dispatchers_context": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "debug_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "cloning_a_span_calls_clone_span": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "warn_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "trace_span_root": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "non_blocking::test::backpressure_exerted": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"passed_count": 112, "failed_count": 1, "skipped_count": 1, "passed_tests": ["event_outside_of_span", "handles_to_different_spans_with_the_same_metadata_are_not_equal", "string_message_without_delims", "non_blocking::test::multi_threaded_writes", "rolling::test::write_hourly_log", "rolling::test::test_round_date_hourly", "span_with_parent", "trace_with_parent", "spans_always_go_to_the_subscriber_that_tagged_them", "rolling::test::test_round_date_minutely", "rolling::test::write_never_log", "event_macros_dont_infinite_loop", "prefixed_span_macros", "rolling::test::test_join_date_never", "trace_span", "locals_with_message", "span_closes_after_event", "warn_with_parent", "rolling::test::test_next_date_never", "rolling::test::test_next_date_daily", "warn_span", "info_root", "info", "borrow_val_events", "span", "move_field_out_of_struct", "nonzeroi32_event_without_message", "span_root", "info_span_root", "borrow_val_spans", "locals_no_message", "both_shorthands", "new_span_with_target_and_log_level", "record_new_values_for_fields", "rolling::test::test_round_date_daily", "rolling::test::test_next_date_minutely", "trace", "span_closes_when_exited", "prefixed_event_macros", "debug_shorthand", "event_with_message", "debug_root", "event_root", "contextual_root", "callsite_macro_api", "rolling::test::write_minutely_log", "contextual_child", "error_span_with_parent", "debug_span_root", "cloning_a_span_calls_clone_span", "explicit_child", "warn_root", "trace_span_root", "non_blocking::test::backpressure_exerted", "debug", "record_new_value_for_field", "rolling::test::write_daily_log", "one_with_everything", "event_without_message", "enter", "info_with_parent", "explicit_child_at_levels", "trace_span_with_parent", "warn", "rolling::test::test_rotation_path_daily", "trace_root", "dropping_a_span_calls_drop_span", "moved_field", "display_shorthand", "warn_span_with_parent", "multiple_max_level_hints", "warn_span_root", "dotted_field_name", "event", "field_shorthand_only", "error_span_root", "error_root", "handles_to_different_spans_are_not_equal", "info_span", "rolling::test::test_rotation_path_minutely", "error_span", "explicit_child_regardless_of_ctx", "borrowed_field", "rolling::test::test_rotation_path_hourly", "info_span_with_parent", "explicit_root_span_is_root_regardless_of_ctx", "event_with_parent", "max_level_hints", "message_without_delims", "debug_span_with_parent", "spans_always_go_to_the_subscriber_that_tagged_them_even_across_threads", "filter_caching_is_lexically_scoped", "handles_to_the_same_span_are_equal", "debug_span", "clone_and_drop_span_always_go_to_the_subscriber_that_tagged_the_span", "async_fn_with_async_trait_and_fields_expressions", "events_dont_leak", "new_span_after_event", "error", "explicit_root_span_is_root", "async_fn_nested", "async_fn_only_enters_for_polls", "error_with_parent", "span_with_non_rust_symbol", "filters_are_reevaluated_for_different_call_sites", "async_fn_with_async_trait_and_fields_expressions_with_generic_parameter", "rolling::test::test_next_date_hourly", "debug_with_parent", "filters_are_not_reevaluated_for_the_same_span", "wrapping_event_without_message", "spans_dont_leak", "drop_span_when_exiting_dispatchers_context"], "failed_tests": ["async_fn_with_async_trait"], "skipped_tests": ["non_blocking::test::logs_dropped_if_lossy"]}
{"passed_count": 0, "failed_count": 0, "skipped_count": 0, "passed_tests": [], "failed_tests": [], "skipped_tests": []}
{"passed_count": 114, "failed_count": 1, "skipped_count": 1, "passed_tests": ["event_outside_of_span", "entered", "handles_to_different_spans_with_the_same_metadata_are_not_equal", "string_message_without_delims", "non_blocking::test::multi_threaded_writes", "rolling::test::write_hourly_log", "rolling::test::test_round_date_hourly", "span_with_parent", "trace_with_parent", "spans_always_go_to_the_subscriber_that_tagged_them", "rolling::test::test_round_date_minutely", "rolling::test::write_never_log", "event_macros_dont_infinite_loop", "prefixed_span_macros", "rolling::test::test_join_date_never", "trace_span", "locals_with_message", "span_closes_after_event", "warn_with_parent", "rolling::test::test_next_date_never", "rolling::test::test_next_date_daily", "warn_span", "info_root", "info", "borrow_val_events", "span", "move_field_out_of_struct", "nonzeroi32_event_without_message", "span_root", "info_span_root", "borrow_val_spans", "locals_no_message", "both_shorthands", "record_new_values_for_fields", "new_span_with_target_and_log_level", "rolling::test::test_round_date_daily", "rolling::test::test_next_date_minutely", "trace", "span_closes_when_exited", "prefixed_event_macros", "entered_api", "debug_shorthand", "event_with_message", "debug_root", "event_root", "contextual_root", "callsite_macro_api", "rolling::test::write_minutely_log", "contextual_child", "error_span_with_parent", "debug_span_root", "cloning_a_span_calls_clone_span", "explicit_child", "warn_root", "trace_span_root", "non_blocking::test::backpressure_exerted", "debug", "record_new_value_for_field", "rolling::test::write_daily_log", "one_with_everything", "event_without_message", "enter", "info_with_parent", "explicit_child_at_levels", "trace_span_with_parent", "warn", "rolling::test::test_rotation_path_daily", "trace_root", "dropping_a_span_calls_drop_span", "moved_field", "display_shorthand", "warn_span_with_parent", "multiple_max_level_hints", "warn_span_root", "dotted_field_name", "event", "field_shorthand_only", "error_span_root", "error_root", "handles_to_different_spans_are_not_equal", "info_span", "rolling::test::test_rotation_path_minutely", "error_span", "explicit_child_regardless_of_ctx", "borrowed_field", "rolling::test::test_rotation_path_hourly", "info_span_with_parent", "explicit_root_span_is_root_regardless_of_ctx", "event_with_parent", "max_level_hints", "message_without_delims", "debug_span_with_parent", "spans_always_go_to_the_subscriber_that_tagged_them_even_across_threads", "filter_caching_is_lexically_scoped", "handles_to_the_same_span_are_equal", "debug_span", "clone_and_drop_span_always_go_to_the_subscriber_that_tagged_the_span", "async_fn_with_async_trait_and_fields_expressions", "events_dont_leak", "new_span_after_event", "error", "explicit_root_span_is_root", "async_fn_nested", "async_fn_only_enters_for_polls", "error_with_parent", "span_with_non_rust_symbol", "filters_are_reevaluated_for_different_call_sites", "async_fn_with_async_trait_and_fields_expressions_with_generic_parameter", "rolling::test::test_next_date_hourly", "debug_with_parent", "filters_are_not_reevaluated_for_the_same_span", "wrapping_event_without_message", "spans_dont_leak", "drop_span_when_exiting_dispatchers_context"], "failed_tests": ["async_fn_with_async_trait"], "skipped_tests": ["non_blocking::test::logs_dropped_if_lossy"]}