
AWS X-Ray
Trace requests through distributed and serverless apps on AWS.
Discover top open-source software, updated regularly with real-world adoption signals.

Structured, event-based diagnostics for Rust applications and libraries
tracing provides a flexible framework for instrumenting Rust code with structured, event‑level diagnostics, enabling logging, span tracking, and log integration.

tracing is a Rust library that lets developers instrument their programs with structured, event‑based diagnostics. By using macros such as info!, , and the attribute, code can emit rich events and enter spans that automatically capture function arguments and execution context. The crate is runtime‑agnostic, so it works with any executor, not only Tokio.
debug!#[tracing::instrument]A Subscriber consumes the emitted data; the companion tracing-subscriber crate provides ready‑made implementations, including a formatter that writes human‑readable logs to stdout and a bridge that forwards traditional log records into the tracing system. Developers can build custom subscribers to send data to tracing back‑ends, metrics systems, or distributed tracing services. Integration is as simple as adding tracing = "0.1" and tracing-subscriber = "0.3" to Cargo.toml and initializing a subscriber at program start. Because the macros compile away when disabled, the overhead is minimal in production builds.
When teams consider Tokio Tracing, these hosted platforms usually appear on the same shortlist.
Looking for a hosted option? These are the services engineering teams benchmark against before choosing open source.
Async request handling
Correlate inbound request spans with downstream service calls for end‑to‑end latency analysis.
Library diagnostics
Expose detailed events that downstream applications can filter or route to custom sinks.
Performance profiling
Collect fine‑grained trace data to identify hot paths and bottlenecks.
Log aggregation migration
Bridge existing `log` statements into structured traces without code changes.
No, tracing is runtime‑agnostic and works with any executor.
Tracing provides structured fields, spans, and hierarchical context, whereas `log` only supports flat messages.
Yes, tracing-subscriber can consume `log` events and forward them into the tracing system.
A component that receives events and spans, deciding how to record or display them.
tracing-subscriber::fmt::init() installs a simple stdout formatter based on the RUST_LOG environment variable.
Project at a glance
ActiveLast synced 4 days ago