diff --git a/crates/vite_shared/src/tracing.rs b/crates/vite_shared/src/tracing.rs index 97c889b11e..e3ebcb15e1 100644 --- a/crates/vite_shared/src/tracing.rs +++ b/crates/vite_shared/src/tracing.rs @@ -1,6 +1,6 @@ //! Tracing initialization for vite-plus -use std::sync::OnceLock; +use std::{str::FromStr, sync::OnceLock}; use tracing_subscriber::{ filter::{LevelFilter, Targets}, @@ -14,25 +14,28 @@ use crate::env_vars; /// Uses `OnceLock` to ensure tracing is only initialized once, /// even if called multiple times. /// +/// Only sets the global default subscriber when `VITE_LOG` is set. +/// When unset, the global default slot is left free so that other +/// subscribers (e.g., rolldown devtools) can claim it without panicking. +/// /// # Environment Variables /// - `VITE_LOG`: Controls log filtering (e.g., "debug", "vite_task=trace") pub fn init_tracing() { static TRACING: OnceLock<()> = OnceLock::new(); TRACING.get_or_init(|| { + let Ok(env_var) = std::env::var(env_vars::VITE_LOG) else { + return; + }; + tracing_subscriber::registry() .with( - std::env::var(env_vars::VITE_LOG) - .map_or_else( - |_| Targets::new(), - |env_var| { - use std::str::FromStr; - Targets::from_str(&env_var).unwrap_or_default() - }, - ) + Targets::from_str(&env_var) + .unwrap_or_default() // disable brush-parser tracing .with_targets([("tokenize", LevelFilter::OFF), ("parse", LevelFilter::OFF)]), ) .with(tracing_subscriber::fmt::layer()) - .init(); + .try_init() + .ok(); }); }