aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/main.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-22 10:29:19 +0900
committernsfisis <nsfisis@gmail.com>2026-02-22 10:29:19 +0900
commit2c243a3cb814939bbe40fda1608781825ab0d77d (patch)
treecb79b397e19e23b1670ab2ef3766c0c4717637aa /crates/mozart/src/main.rs
parent0a8e5935e6305819bb02d8c69e2f046ff397913a (diff)
downloadphp-mozart-2c243a3cb814939bbe40fda1608781825ab0d77d.tar.gz
php-mozart-2c243a3cb814939bbe40fda1608781825ab0d77d.tar.zst
php-mozart-2c243a3cb814939bbe40fda1608781825ab0d77d.zip
feat(tracing): add performance profiling via tracing crate
Wire up the existing --profile flag with tracing-subscriber to emit span timings on stderr. Supports MOZART_LOG env var override and verbose-level-aware filtering. No subscriber is installed when --profile is off, keeping tracing macros zero-cost. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/main.rs')
-rw-r--r--crates/mozart/src/main.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/crates/mozart/src/main.rs b/crates/mozart/src/main.rs
index 59ad392..ebe84e5 100644
--- a/crates/mozart/src/main.rs
+++ b/crates/mozart/src/main.rs
@@ -1,9 +1,45 @@
use clap::Parser;
use mozart::commands;
use mozart_core::exit_code;
+use tracing_subscriber::{fmt, prelude::*, EnvFilter};
+
+fn init_tracing(profile: bool, verbose: u8, quiet: bool) {
+ // MOZART_LOG environment variable takes highest priority.
+ if let Ok(env_filter) = EnvFilter::try_from_env("MOZART_LOG") {
+ tracing_subscriber::registry()
+ .with(fmt::layer().with_writer(std::io::stderr))
+ .with(env_filter)
+ .init();
+ return;
+ }
+
+ if profile {
+ let filter = match verbose {
+ 0 => "mozart=info",
+ 1 | 2 => "mozart=debug",
+ _ => "mozart=trace",
+ };
+ tracing_subscriber::registry()
+ .with(
+ fmt::layer()
+ .with_writer(std::io::stderr)
+ .with_timer(fmt::time::uptime())
+ .with_span_events(fmt::format::FmtSpan::CLOSE),
+ )
+ .with(EnvFilter::new(filter))
+ .init();
+ } else if verbose >= 3 && !quiet {
+ tracing_subscriber::registry()
+ .with(fmt::layer().with_writer(std::io::stderr).with_target(false))
+ .with(EnvFilter::new("mozart=debug"))
+ .init();
+ }
+ // Otherwise: no subscriber installed → tracing macros are effectively zero-cost no-ops.
+}
fn main() {
let cli = commands::Cli::parse();
+ init_tracing(cli.profile, cli.verbose, cli.quiet);
match commands::execute(&cli) {
Ok(()) => {}
Err(e) => {