26 releases

new 0.11.0-alpha.5 Jun 13, 2024
0.10.0 Jul 4, 2016
0.3.2 Mar 24, 2016
0.1.0 Aug 8, 2015

#54 in Debugging

Download history 16/week @ 2024-02-26 4/week @ 2024-03-04 23/week @ 2024-03-11 1/week @ 2024-03-18 72/week @ 2024-04-01 10/week @ 2024-04-08 7/week @ 2024-04-22 22/week @ 2024-05-06 4/week @ 2024-05-13 3/week @ 2024-05-20 259/week @ 2024-06-03 268/week @ 2024-06-10

530 downloads per month
Used in 7 crates





Current docs

Developer-first diagnostics

emit is a framework for manually instrumenting Rust applications with an expressive syntax inspired by Message Templates.

emit represents all diagnostics as events; a combination of timestamp or timespan, template, and properties. Traditional log records, spans in a distributed trace, and metric samples are all represented as events. Having a unified model of all these signals means you can always capture your diagnostics in one way or another.

version = "0.11.0-alpha.5"

version = "0.11.0-alpha.5"
use std::time::Duration;

fn main() {
    let rt = emit::setup()



#[emit::span("Greet {user}")]
fn greet(user: &str) {
    emit::info!("Hello, {user}!");

The output of running the above program

Current status

This is alpha-level software. It implements a complete framework but has almost no tests and needs a lot more documentation. We're

Getting started

See the examples directory and emit documentation to get started with emit.

Where can I send my diagnostics?

Diagnostics produced by emit are sent to an emitter. This repository currently implements the following emitters:

  • emit_term for writing human-readable output to the console.
  • emit_file for writing JSON or another machine-readable format to rolling files.
  • emit_otlp for sending diagnostics to an OpenTelemetry compatible collector.
  • emit_opentelemetry for integrating emit into an application using the OpenTelemetry SDK for its diagnostics.


~31K SLoC