tokio-trace 0.1.0

A scoped, structured logging and diagnostics system.
Documentation
use tokio_trace::Level;

#[macro_use]
extern crate tokio_trace;
// Tests that macros work across various invocation syntax.
//
// These are quite repetitive, and _could_ be generated by a macro. However,
// they're compile-time tests, so I want to get line numbers etc out of
// failures, and producing them with a macro would muddy the waters a bit.

#[test]
fn span() {
    span!(Level::DEBUG, target: "foo_events", "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    span!(Level::DEBUG, target: "foo_events", "foo");
    span!(Level::DEBUG, target: "foo_events", "bar",);
    span!(Level::DEBUG, "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
    span!(Level::TRACE, "foo", bar.baz = 2, quux = 3);
    span!(Level::TRACE, "foo", bar.baz = 2, quux = 4,);
    span!(Level::TRACE, "foo");
    span!(Level::TRACE, "bar",);
}

#[test]
fn trace_span() {
    trace_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    trace_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    trace_span!(target: "foo_events", "foo");
    trace_span!(target: "foo_events", "bar",);
    trace_span!("foo", bar.baz = 2, quux = 3);
    trace_span!("foo", bar.baz = 2, quux = 4,);
    trace_span!("bar");
    trace_span!("bar",);
}

#[test]
fn debug_span() {
    debug_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    debug_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    debug_span!(target: "foo_events", "foo");
    debug_span!(target: "foo_events", "bar",);
    debug_span!("foo", bar.baz = 2, quux = 3);
    debug_span!("foo", bar.baz = 2, quux = 4,);
    debug_span!("bar");
    debug_span!("bar",);
}

#[test]
fn info_span() {
    info_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    info_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    info_span!(target: "foo_events", "foo");
    info_span!(target: "foo_events", "bar",);
    info_span!("foo", bar.baz = 2, quux = 3);
    info_span!("foo", bar.baz = 2, quux = 4,);
    info_span!("bar");
    info_span!("bar",);
}

#[test]
fn warn_span() {
    warn_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    warn_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    warn_span!(target: "foo_events", "foo");
    warn_span!(target: "foo_events", "bar",);
    warn_span!("foo", bar.baz = 2, quux = 3);
    warn_span!("foo", bar.baz = 2, quux = 4,);
    warn_span!("bar");
    warn_span!("bar",);
}

#[test]
fn error_span() {
    error_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    error_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    error_span!(target: "foo_events", "foo");
    error_span!(target: "foo_events", "bar",);
    error_span!("foo", bar.baz = 2, quux = 3);
    error_span!("foo", bar.baz = 2, quux = 4,);
    error_span!("bar");
    error_span!("bar",);
}

#[test]
fn span_root() {
    span!(Level::DEBUG, target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
    span!(Level::DEBUG, target: "foo_events", parent: None, "foo");
    span!(Level::DEBUG, target: "foo_events", parent: None, "bar",);
    span!(Level::TRACE, parent: None, "foo", bar.baz = 2, quux = 3);
    span!(Level::TRACE, parent: None, "foo", bar.baz = 2, quux = 4,);
    span!(Level::TRACE, parent: None, "foo");
    span!(Level::TRACE, parent: None, "bar",);
}

#[test]
fn trace_span_root() {
    trace_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
    trace_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
    trace_span!(target: "foo_events", parent: None, "foo");
    trace_span!(target: "foo_events", parent: None, "bar",);
    trace_span!(parent: None, "foo", bar.baz = 2, quux = 3);
    trace_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
    trace_span!(parent: None, "foo");
    trace_span!(parent: None, "bar",);
}

#[test]
fn debug_span_root() {
    debug_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
    debug_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
    debug_span!(target: "foo_events", parent: None, "foo");
    debug_span!(target: "foo_events", parent: None, "bar",);
    debug_span!(parent: None, "foo", bar.baz = 2, quux = 3);
    debug_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
    debug_span!(parent: None, "foo");
    debug_span!(parent: None, "bar",);
}

#[test]
fn info_span_root() {
    info_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
    info_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
    info_span!(target: "foo_events", parent: None, "foo");
    info_span!(target: "foo_events", parent: None, "bar",);
    info_span!(parent: None, "foo", bar.baz = 2, quux = 3);
    info_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
    info_span!(parent: None, "foo");
    info_span!(parent: None, "bar",);
}

#[test]
fn warn_span_root() {
    warn_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
    warn_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
    warn_span!(target: "foo_events", parent: None, "foo");
    warn_span!(target: "foo_events", parent: None, "bar",);
    warn_span!(parent: None, "foo", bar.baz = 2, quux = 3);
    warn_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
    warn_span!(parent: None, "foo");
    warn_span!(parent: None, "bar",);
}

#[test]
fn error_span_root() {
    error_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 3);
    error_span!(target: "foo_events", parent: None, "foo", bar.baz = 2, quux = 4,);
    error_span!(target: "foo_events", parent: None, "foo");
    error_span!(target: "foo_events", parent: None, "bar",);
    error_span!(parent: None, "foo", bar.baz = 2, quux = 3);
    error_span!(parent: None, "foo", bar.baz = 2, quux = 4,);
    error_span!(parent: None, "foo");
    error_span!(parent: None, "bar",);
}

#[test]
fn span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    span!(Level::DEBUG, target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    span!(Level::DEBUG, target: "foo_events", parent: &p, "foo");
    span!(Level::DEBUG, target: "foo_events", parent: &p, "bar",);

    span!(Level::DEBUG, parent: &p, "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, parent: &p, "foo", bar.baz = 2, quux = 4,);

    span!(Level::DEBUG, parent: &p, "foo");
    span!(Level::DEBUG, parent: &p, "bar",);
}

#[test]
fn trace_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    trace_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    trace_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    trace_span!(target: "foo_events", parent: &p, "foo");
    trace_span!(target: "foo_events", parent: &p, "bar",);

    trace_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    trace_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    trace_span!(parent: &p, "foo");
    trace_span!(parent: &p, "bar",);
}

#[test]
fn debug_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    debug_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    debug_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    debug_span!(target: "foo_events", parent: &p, "foo");
    debug_span!(target: "foo_events", parent: &p, "bar",);

    debug_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    debug_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    debug_span!(parent: &p, "foo");
    debug_span!(parent: &p, "bar",);
}

#[test]
fn info_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    info_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    info_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    info_span!(target: "foo_events", parent: &p, "foo");
    info_span!(target: "foo_events", parent: &p, "bar",);

    info_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    info_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    info_span!(parent: &p, "foo");
    info_span!(parent: &p, "bar",);
}

#[test]
fn warn_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    warn_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    warn_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    warn_span!(target: "foo_events", parent: &p, "foo");
    warn_span!(target: "foo_events", parent: &p, "bar",);

    warn_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    warn_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    warn_span!(parent: &p, "foo");
    warn_span!(parent: &p, "bar",);
}

#[test]
fn error_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    error_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    error_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    error_span!(target: "foo_events", parent: &p, "foo");
    error_span!(target: "foo_events", parent: &p, "bar",);

    error_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    error_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    error_span!(parent: &p, "foo");
    error_span!(parent: &p, "bar",);
}

#[test]
fn event() {
    event!(Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(Level::DEBUG, "foo");
    event!(Level::DEBUG, "foo: {}", 3);
    event!(Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
    event!(target: "foo_events", Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(target: "foo_events", Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(target: "foo_events", Level::DEBUG, "foo");
    event!(target: "foo_events", Level::DEBUG, "foo: {}", 3);
    event!(target: "foo_events", Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
}

#[test]
fn trace() {
    trace!(foo = 3, bar.baz = 2, quux = false);
    trace!(foo = 3, bar.baz = 3,);
    trace!("foo");
    trace!("foo: {}", 3);
    trace!({ foo = 3, bar.baz = 80 }, "quux");
    trace!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!({ foo = 2, bar.baz = 78, }, "quux");
    trace!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    trace!(target: "foo_events", foo = 3, bar.baz = 3,);
    trace!(target: "foo_events", "foo");
    trace!(target: "foo_events", "foo: {}", 3);
    trace!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    trace!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
}

#[test]
fn debug() {
    debug!(foo = 3, bar.baz = 2, quux = false);
    debug!(foo = 3, bar.baz = 3,);
    debug!("foo");
    debug!("foo: {}", 3);
    debug!({ foo = 3, bar.baz = 80 }, "quux");
    debug!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!({ foo = 2, bar.baz = 78, }, "quux");
    debug!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    debug!(target: "foo_events", foo = 3, bar.baz = 3,);
    debug!(target: "foo_events", "foo");
    debug!(target: "foo_events", "foo: {}", 3);
    debug!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
}

#[test]
fn info() {
    info!(foo = 3, bar.baz = 2, quux = false);
    info!(foo = 3, bar.baz = 3,);
    info!("foo");
    info!("foo: {}", 3);
    info!({ foo = 3, bar.baz = 80 }, "quux");
    info!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!({ foo = 2, bar.baz = 78, }, "quux");
    info!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    info!(target: "foo_events", foo = 3, bar.baz = 3,);
    info!(target: "foo_events", "foo");
    info!(target: "foo_events", "foo: {}", 3);
    info!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
}

#[test]
fn warn() {
    warn!(foo = 3, bar.baz = 2, quux = false);
    warn!(foo = 3, bar.baz = 3,);
    warn!("foo");
    warn!("foo: {}", 3);
    warn!({ foo = 3, bar.baz = 80 }, "quux");
    warn!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!({ foo = 2, bar.baz = 78 }, "quux");
    warn!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    warn!(target: "foo_events", foo = 3, bar.baz = 3,);
    warn!(target: "foo_events", "foo");
    warn!(target: "foo_events", "foo: {}", 3);
    warn!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    warn!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
}

#[test]
fn error() {
    error!(foo = 3, bar.baz = 2, quux = false);
    error!(foo = 3, bar.baz = 3,);
    error!("foo");
    error!("foo: {}", 3);
    error!({ foo = 3, bar.baz = 80 }, "quux");
    error!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!({ foo = 2, bar.baz = 78, }, "quux");
    error!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    error!(target: "foo_events", foo = 3, bar.baz = 3,);
    error!(target: "foo_events", "foo");
    error!(target: "foo_events", "foo: {}", 3);
    error!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    error!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
}

#[test]
fn callsite_macro_api() {
    // This test should catch any inadvertant breaking changes
    // caused bu changes to the macro.
    let _callsite = callsite! {
        name: "test callsite",
        kind: tokio_trace::metadata::Kind::EVENT,
        target: "test target",
        level: tokio_trace::Level::TRACE,
        fields: foo, bar,
    };
    let _callsite = callsite! {
        name: "test callsite",
        kind: tokio_trace::metadata::Kind::SPAN,
        level: tokio_trace::Level::TRACE,
        fields: foo,
    };
    let _callsite = callsite! {
        name: "test callsite",
        kind: tokio_trace::metadata::Kind::SPAN,
        fields: foo,
    };
}