tracing-collector

Crates.iotracing-collector
lib.rstracing-collector
version0.1.2
sourcesrc
created_at2023-02-05 17:59:04.657691
updated_at2023-02-06 08:50:32.742975
descriptionA tracing subscriber that collects a copy of the traces for use in tests with insta snapshots
homepage
repositoryhttps://github.com/akesson/tracing-collector.git
max_upload_size
id777289
size17,733
henrik (akesson)

documentation

README

crates.io

TracingCollector

TracingCollector creates a tracing subscriber that collects a copy of all traces into a buffer. These traces can be retrieved by calling its Display implementation, i.e. calling log.to_string() or format!("{log}"). This is useful for testing with insta snapshots.

IMPORTANT! TracingCollector is meant for use when testing. It collects logs into a memory buffer which keeps growing until it is read, the program exits or it is dropped. This means that if you are using TracingCollector in production the program will eventually run out of memory.

When the TracingCollector is dropped, the buffer is emptied and the tracing subscriber is released but the memory equivalent of a Mutex and an empty Vec is leaked.

When reading the traces, they are stripped of ANSI escape codes and prefixed with a character. The former allows the use of colored & formatted terminal output when the test fails or is run with --nocapture and the latter makes the insta inline snapshots work since rust's r### raw string literals strips leading whitespace. The prefix can be changed or removed using the set_prefix and remove_prefix methods.

Example

#[test]
fn test_logs() {
    let log = TracingCollector::init_debug_level();
    tracing::info!("First log");

    insta::assert_display_snapshot!(log, @r###"
    ㏒   INFO  First log
        at tests/test.rs:6

    "###);

    tracing::debug!("Second log");
    tracing::info!("Third log");

    insta::assert_display_snapshot!(log, @r###"
    ㏒  DEBUG  Second log
        at tests/test.rs:14

      INFO  Third log
       at tests/test.rs:15

   "###);
}
Commit count: 6

cargo fmt