mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-27 00:00:12 +02:00
trace: Change Span::enter to return a guard, add Span::in_scope (#1076)
## Motivation Currently, the primary way to use a span is to use `.enter` and pass a closure to be executed under the span. While that is convenient in many settings, it also comes with two decently inconvenient drawbacks: - It breaks control flow statements like `return`, `?`, `break`, and `continue` - It require re-indenting a potentially large chunk of code if you wish it to appear under a span ## Solution This branch changes the `Span::enter` function to return a scope guard that exits the span when dropped, as in: ```rust let guard = span.enter(); // code here is within the span drop(guard); // code here is no longer within the span ``` The method previously called `enter`, which takes a closure and executes it in the span's context, is now called `Span::in_scope`, and was reimplemented on top of the new `enter` method. This is a breaking change to `tokio-trace` that will be part of the upcoming 0.2 release. Closes #1075 Signed-off-by: Eliza Weisman <[email protected]>
This commit is contained in:
@@ -125,7 +125,7 @@ fn main() {
|
||||
|
||||
tokio_trace::subscriber::with_default(subscriber, || {
|
||||
let mut foo: u64 = 2;
|
||||
span!(Level::TRACE, "my_great_span", foo_count = &foo).enter(|| {
|
||||
span!(Level::TRACE, "my_great_span", foo_count = &foo).in_scope(|| {
|
||||
foo += 1;
|
||||
info!({ yak_shaved = true, yak_count = 1 }, "hi from inside my span");
|
||||
span!(
|
||||
@@ -134,7 +134,7 @@ fn main() {
|
||||
foo_count = &foo,
|
||||
baz_count = 5
|
||||
)
|
||||
.enter(|| {
|
||||
.in_scope(|| {
|
||||
warn!({ yak_shaved = false, yak_count = -1 }, "failed to shave yak");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user