swc_cli_impl/util/
trace.rs

1use tracing_chrome::{ChromeLayerBuilder, FlushGuard};
2use tracing_subscriber::{
3    filter, prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, Layer,
4};
5
6/// Register a tracing subscriber generated event trace format output.
7pub(crate) fn init_trace(out_file: &Option<String>) -> Option<FlushGuard> {
8    let mut layer = ChromeLayerBuilder::new().include_args(true);
9
10    if let Some(trace_out_file) = out_file {
11        layer = layer.file(trace_out_file.clone());
12    }
13
14    let (chrome_layer, guard) = layer.build();
15    tracing_subscriber::registry()
16        .with(chrome_layer.with_filter(filter::filter_fn(|metadata| {
17            !metadata.target().contains("cranelift") && !metadata.name().contains("log ")
18        })))
19        .try_init()
20        .expect("Should able to register trace");
21
22    Some(guard)
23}