Expand description
Structured diagnostics for Rust applications.
emit
is a framework for adding diagnostics to your Rust applications with a simple, powerful data model and an expressive syntax inspired by Message Templates.
These are the technical API docs for emit
. Also see the guide for a complete introduction.
§Getting started
[dependencies.emit]
version = "0.11.0-alpha.21"
[dependencies.emit_term]
version = "0.11.0-alpha.21"
fn main() {
let rt = emit::setup()
.emit_to(emit_term::stdout())
.init();
// Your app code goes here
greet("Rust");
rt.blocking_flush(std::time::Duration::from_secs(5));
}
#[emit::span("Greet {user}")]
fn greet(user: &str) {
emit::info!("Hello, {user}!");
}
The setup()
function configures emit
with an Emitter
to write Event
s to. The emit
macro emits an event, capturing any ambient state referred to in its template. The span
macro instruments a function, timing its execution and correlating any other events emitted within it together.
§Stable vs nightly toolchains
emit
works on stable versions of Rust, but can provide more accurate compiler messages on nightly toolchains.
§Crate features
std
(default): Enable support for the standard library. Enable capturing properties as errors. Impliesalloc
alloc
: Enable APIs that require an allocator.implicit_rt
(default): Enable configuring the default shared runtime and callingemit
andspan
without needing to specify a runtime manually.implicit_internal_rt
(default): Enable configuring the internal runtime foremit
’s own diagnostics.sval
: Enable capturing complex properties usingsval
.serde
: Enable capturing complex properties usingserde
.
§Troubleshooting
Emitters write their own diagnostics to an alternative emit
runtime, which you can configure via Setup::init_internal
to debug them:
fn main() {
// Configure the internal runtime before your regular setup
let internal_rt = emit::setup()
.emit_to(emit_term::stdout())
.init_internal();
let rt = emit::setup()
.emit_to(emit::emitter::from_fn(|evt| println!("{evt:#?}")))
.init();
// Your app code goes here
rt.blocking_flush(std::time::Duration::from_secs(5));
// Flush the internal runtime after your regular setup
internal_rt.blocking_flush(std::time::Duration::from_secs(5));
}
Re-exports§
pub use self::frame::Frame;
pub use self::kind::Kind;
pub use self::level::Level;
pub use self::metric::Metric;
pub use self::span::Span;
pub use self::span::SpanCtxt;
pub use self::span::SpanId;
pub use self::span::TraceId;
pub use self::timer::Timer;
pub use setup::setup;
pub use setup::Setup;
Modules§
- The
And
type. - The
Clock
type. - The
Ctxt
type. - The
Emitter
type. - The
Empty
type. - The
Event
type. - The
Extent
type. - The
Filter
type. - The
Frame
type. - The
Kind
type. - The
Level
type. - The
Metric
type. - The
Or
type. - The
Path
type. - Components provided by the underlying platform.
- The
Props
type. - The
Rng
type. - The
Runtime
type. - The
Setup
type. - The
Span
type. - The
Str
type. - The
Template
type. - The
Timer
type. - The
Timestamp
type. - The
Value
type. - Extensions to the diagnostic model using well-known properties.
Macros§
- Emit a debug event.
- Construct a debug event.
- Emit an event.
- Emit an error event.
- Construct an error event.
- Construct an event.
- Format a template.
- Emit a info event.
- Construct an info event.
- Get a
Path
of the executing module for use inEvent::mdl
. - Construct a path.
- Get a
Path
of the package name for use inEvent::mdl
. - Construct a set of properties.
- Construct a template.
- Get the parts of a template.
- Emit a warn event.
- Construct a warn event.
Structs§
- A type that behaves like a default, empty, null value.
- A captured record of something significant that occurred during the operation of a system.
- A hierarchical identifier, such as
a::b::c
. - A string value.
- A lazily evaluated text template with named holes for interpolating properties into.
- A Unix timestamp with nanosecond precision.
- An anonymous captured value that can be serialized or formatted.
Traits§
- A service to get the current
Timestamp
. - Storage for ambient
Props
. - An asynchronous destination for diagnostic data.
- A filter over
Event
s. - A non-cryptographic source of randomness.
Functions§
- Flush the runtime, ensuring all diagnostic events are fully processed.
- Get the shared clock.
- Get the shared context.
- Emit an event.
- Get the shared random generator.
Attribute Macros§
- Capture a property using its
Debug
implementation. - Capture a property using its
Display
implementation. - Capture a property using its
Error
implementation. - Capture a property using its
serde::Serialize
implementation. - Capture a property using its
sval::Value
implementation. - Capture a property using its
ToValue
implementation. - Wrap an operation in a debug span.
- Wrap an operation in an error span.
- Specify Rust format flags to use when rendering a property in a template.
- Wrap an operation in an info span.
- Specify the key for a property.
- Specify that a property value of
None
should not be captured, instead of being captured asnull
. - Wrap an operation in a span.
- Wrap an operation in a warn span.