3 个版本
0.1.2 | 2023年2月6日 |
---|---|
0.1.1 | 2023年2月5日 |
0.1.0 | 2023年2月5日 |
#569 in 测试
每月 331 次下载
10KB
113 行
TracingCollector
TracingCollector
创建一个跟踪订阅者,将所有跟踪信息收集到一个缓冲区中。可以通过调用其Display实现来检索这些跟踪信息,即调用 log.to_string()
或 format!("{log}")
。这对于使用 insta 快照进行测试非常有用。
重要!TracingCollector
是用于测试的。它将日志收集到内存缓冲区中,该缓冲区在读取、程序退出或被丢弃之前会不断增长。这意味着如果在生产中使用 TracingCollector
,程序最终会耗尽内存。
当 TracingCollector
被丢弃时,缓冲区会被清空,跟踪订阅者也会被释放,但相当于互斥锁和一个空Vec的内存会泄漏。
读取跟踪信息时,它们会被移除ANSI转义码,并前缀一个 ㏒
字符。前者允许在测试失败或以 --nocapture
运行时使用带颜色的格式化终端输出,后者使得insta内联快照能够正常工作,因为rust的 r###
原始字符串字面量会移除前导空白。可以使用 set_prefix
和 remove_prefix
方法更改或删除前缀。
示例
#[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
"###);
}
依赖项
~1.5MB
~27K SLoC