penumbra_sdk_test_subscriber/
lib.rs

1//! A pretty [`tracing`] subscriber for use in test cases.
2//!
3//! NB: this subscriber makes use of a test writer, that is compatible with `cargo test`'s output
4//! capturing.
5
6use {
7    tracing::subscriber::{set_default, DefaultGuard},
8    tracing_subscriber::{filter::EnvFilter, fmt},
9};
10
11/// Installs a tracing subscriber to log events until the returned guard is dropped.
12//  NB: this is marked as "dead code" but it is used by integration tests.
13#[allow(dead_code)]
14pub fn set_tracing_subscriber() -> DefaultGuard {
15    let filter = "info,penumbra_sdk_app=trace,penumbra_sdk_mock_consensus=trace";
16    let filter = EnvFilter::try_from_default_env()
17        .or_else(|_| EnvFilter::try_new(filter))
18        .expect("should have a valid filter directive");
19    set_tracing_subscriber_with_env_filter(filter)
20}
21
22/// Install a tracing subscriber with a custom filter.
23//  NB: this is marked as "dead code" but it is used by integration tests.
24#[allow(dead_code)]
25pub fn set_tracing_subscriber_with_env_filter(filter: EnvFilter) -> DefaultGuard {
26    // Without explicitly disabling the `r1cs` target, the ZK proof implementations
27    // will spend an enormous amount of CPU and memory building useless tracing output.
28    let filter = filter.add_directive(
29        "r1cs=off"
30            .parse()
31            .expect("rics=off is a valid filter directive"),
32    );
33
34    let subscriber = fmt()
35        .with_env_filter(filter)
36        .pretty()
37        .with_test_writer()
38        .finish();
39
40    set_default(subscriber)
41}