rspack_tracing/
lib.rs

1mod perfetto;
2mod stdout;
3mod tracer;
4
5use std::{fs, io, path::PathBuf};
6
7pub use perfetto::PerfettoTracer;
8pub use stdout::StdoutTracer;
9pub use tracer::{TraceEvent, Tracer};
10use tracing_subscriber::fmt::writer::BoxMakeWriter;
11pub(crate) enum TraceWriter {
12  Stdout,
13  Stderr,
14  File { path: PathBuf },
15}
16
17impl From<String> for TraceWriter {
18  fn from(s: String) -> Self {
19    match s.as_str() {
20      "stdout" => Self::Stdout,
21      "stderr" => Self::Stderr,
22      _ => Self::File { path: s.into() },
23    }
24  }
25}
26
27impl TraceWriter {
28  pub fn make_writer(&self) -> BoxMakeWriter {
29    match self {
30      TraceWriter::Stdout => BoxMakeWriter::new(io::stdout),
31      TraceWriter::Stderr => BoxMakeWriter::new(io::stderr),
32      TraceWriter::File { path } => {
33        BoxMakeWriter::new(fs::File::create(path).expect("Failed to create trace file"))
34      }
35    }
36  }
37}