mirror of
https://github.com/tokio-rs/tracing.git
synced 2025-10-02 07:20:35 +00:00

## Motivation Currently, the default formatter implementations in `tracing-subscriber`'s `fmt` module do not handle explicitly set parent spans for events, such as ```rust let span = tracing::info_span!("some_interesting_span"); tracing::info!(parent: &span, "something is happening!"); ``` Instead, when formatting the span context of an event, the context is _always_ generated from the current span, even when the event has an overridden parent. This is not correct. ## Solution This branch changes the default context formatters to use the explicit parent ID, if it is present. Otherwise, the contexual parent is used, as it was previously. I've also added tests ensuring that this works correctly, and removed some workarounds for the previous incorrect behavior from the examples. Fixes #766 Signed-off-by: Eliza Weisman <eliza@buoyant.io>
Tracing Examples
This directory contains a collection of examples that demonstrate the use of the
tracing
ecosystem:
- tracing:
counters
: Implements a very simple metrics system to demonstrate how subscribers can consume field values as typed data.sloggish
: A demoSubscriber
implementation that mimics the output ofslog-term
'sCompact
formatter.
- tracing-attributes:
attrs-basic
: A simple example of the#[instrument]
attribute.attrs-args
: An example implementing a simple recursive calculation of Fibonacci numbers, to demonstrate how the#[instrument]
attribute can record function arguments.
- tracing-subscriber:
fmt
: Demonstrates the use of thefmt
module intracing-subscriber
, which provides a subscriber implementation that logs traces to the console.fmt-stderr
: Demonstrates overriding the output stream used by thefmt
subscriber.fmt-custom-field
: Demonstrates overriding how thefmt
subscriber formats fields on spans and events.fmt-custom-event
: Demonstrates overriding how thefmt
subscriber formats events.subscriber-filter
: Demonstrates thetracing-subscriber::filter
module, which provides a layer which adds configurable filtering to a subscriber implementation.tower-load
: Demonstrates how dynamically reloadable filters can be used to debug a server under load in production.
- tracing-futures:
spawny-thing
: Demonstrates the use of the#[instrument]
attribute macro asynchronous functions.tokio-spawny-thing.rs
: Similar tospawny-thingy
, but with the additional demonstration instrumenting concurrent tasks created withtokio::spawn
.futures-proxy-server
: Demonstrates the use oftracing-futures
by implementing a simple proxy server, based on this example fromtokio
.async_fn
: Demonstrates how asynchronous functions can be instrumented.echo
: Demonstrates atracing
-instrumented variant of Tokio'secho
example.
- tracing-flame:
infero-flame
: Demonstrates the use oftracing-flame
to generate a flamegraph from spans.
- tracing-tower:
tower-client
: Demonstrates the use oftracing-tower
to instrument a simpletower
HTTP/1.1 client.tower-server
: Demonstrates the use oftracing-tower
to instrument a simpletower
HTTP/1.1 server.
- tracing-serde:
serde-yak-shave
: Demonstrates the use oftracing-serde
by implementing a subscriber that emits trace output as JSON.
- tracing-log:
hyper-echo
: Demonstrates howtracing-log
can be used to record unstructured logs from dependencies astracing
events, by instrumenting this example fromhyper
, and usingtracing-log
to record logs emitted byhyper
.
- tracing-opentelemetry:
opentelemetry
: Demonstrates howtracing-opentelemetry
can be used to export and visualizetracing
span data.opentelemetry-remote-context
: Demonstrates howtracing-opentelemetry
can be used to extract and inject remote context when traces span multiple systems.