#tracing #tracing-subscriber #log #insta #test #memory-buffer

tracing-collector

一个用于收集跟踪信息以便在测试中使用insta快照的跟踪订阅者

3 个版本

0.1.2 2023年2月6日
0.1.1 2023年2月5日
0.1.0 2023年2月5日

#569 in 测试

Download history 31/week @ 2024-03-09 3/week @ 2024-03-16 62/week @ 2024-03-30 44/week @ 2024-04-06 97/week @ 2024-04-13 22/week @ 2024-04-20 39/week @ 2024-04-27 3/week @ 2024-05-04 3/week @ 2024-05-11 37/week @ 2024-05-18 52/week @ 2024-05-25 68/week @ 2024-06-01 116/week @ 2024-06-08 85/week @ 2024-06-15 40/week @ 2024-06-22

每月 331 次下载

MIT 许可证

10KB
113

crates.io

TracingCollector

TracingCollector 创建一个跟踪订阅者,将所有跟踪信息收集到一个缓冲区中。可以通过调用其Display实现来检索这些跟踪信息,即调用 log.to_string()format!("{log}")。这对于使用 insta 快照进行测试非常有用。

重要!TracingCollector 是用于测试的。它将日志收集到内存缓冲区中,该缓冲区在读取、程序退出或被丢弃之前会不断增长。这意味着如果在生产中使用 TracingCollector,程序最终会耗尽内存。

TracingCollector 被丢弃时,缓冲区会被清空,跟踪订阅者也会被释放,但相当于互斥锁和一个空Vec的内存会泄漏。

读取跟踪信息时,它们会被移除ANSI转义码,并前缀一个 字符。前者允许在测试失败或以 --nocapture 运行时使用带颜色的格式化终端输出,后者使得insta内联快照能够正常工作,因为rust的 r### 原始字符串字面量会移除前导空白。可以使用 set_prefixremove_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