pub struct TracingCollector { /* private fields */ }Expand description
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
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
"###);
}Implementations§
Source§impl TracingCollector
impl TracingCollector
pub fn set_prefix(&mut self, prefix: char)
pub fn remove_prefix(&mut self)
Sourcepub fn init_trace_level() -> Self
pub fn init_trace_level() -> Self
Create a TracingCollector that collects traces up to the TRACE level.
Sourcepub fn init_debug_level() -> Self
pub fn init_debug_level() -> Self
Create a TracingCollector that collects traces up to the DEBUG level.
Sourcepub fn init_info_level() -> Self
pub fn init_info_level() -> Self
Create a TracingCollector that collects traces up to the INFO level.
Sourcepub fn init(max_level: Level) -> Self
pub fn init(max_level: Level) -> Self
Create a new TracingCollector that collects traces up to the specified level.