on main help sign in
refactor: now the log will only show error/warn level before tui
commitf02cb4c4992b3802a96c8612ff1b80ce8caee675 authorrobcholz <84130577+robcholz@users.noreply.github.com> dateSat 7 Feb 2026, 19:55 (8 months ago) parent2ef4011
2 files changed+22−14
docs/tasks.md+1−1 src/bin/vibebox-cli.rs+21−13
docs/tasks.md+1−1
@@ -47,7 +47,7 @@
4747 2. [x] Remove old cli.
4848 3. [x] add an actual config file.
4949 4. [x] set up the cli.
50−9. [ ] fix ui overlap, and consistency issue.
50+9. [x] fix ui overlap, and consistency issue.
515110. [ ] `clean_cache` to cleanup the cache.
525211. [ ] intensive integration test.
5353
src/bin/vibebox-cli.rs+21−13
@@ -12,7 +12,8 @@ use dialoguer::Confirm;
1212use time::OffsetDateTime;
1313use time::format_description::well_known::Rfc3339;
1414use tracing_subscriber::filter::LevelFilter;
15−use tracing_subscriber::{EnvFilter, fmt, prelude::*};
15+use tracing_subscriber::registry::Registry;
16+use tracing_subscriber::{EnvFilter, fmt, prelude::*, reload};
1617
1718use vibebox::tui::{AppState, VmInfo};
1819use vibebox::{
@@ -42,7 +43,7 @@ enum Command {
4243fn main() -> Result<()> {
4344 color_eyre::install()?;
4445 let cwd = env::current_dir().map_err(|err| color_eyre::eyre::eyre!(err.to_string()))?;
45− init_tracing(&cwd);
46+ let stderr_handle = init_tracing(&cwd);
4647
4748 let cli = Cli::parse();
4849 tracing::info!(cwd = %cwd.display(), "starting vibebox cli");
@@ -106,6 +107,9 @@ fn main() -> Result<()> {
106107 writeln!(stdout)?;
107108 stdout.flush()?;
108109 }
110+ if let Some(handle) = stderr_handle {
111+ let _ = handle.modify(|filter| *filter = LevelFilter::INFO);
112+ }
109113
110114 tracing::info!(auto_shutdown_ms, "auto shutdown config");
111115 let manager_conn =
@@ -250,8 +254,11 @@ fn format_last_active(value: Option<&str>) -> String {
250254 format!("{} day{} ago", days, if days == 1 { "" } else { "s" })
251255}
252256
253−fn init_tracing(cwd: &Path) {
257+type StderrHandle = reload::Handle<LevelFilter, Registry>;
258+
259+fn init_tracing(cwd: &Path) -> Option<StderrHandle> {
254260 let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
261+ let file_filter = filter.clone();
255262 let stderr_is_tty = std::io::stderr().is_terminal();
256263 let ansi = stderr_is_tty && env::var("VIBEBOX_LOG_NO_COLOR").is_err();
257264 let file = instance::ensure_instance_dir(cwd)
@@ -267,41 +274,42 @@ fn init_tracing(cwd: &Path) {
267274 });
268275
269276 if stderr_is_tty {
277+ let (stderr_filter, handle) = reload::Layer::new(LevelFilter::OFF);
270278 let stderr_layer = fmt::layer()
271279 .with_target(false)
272280 .with_ansi(ansi)
273281 .without_time()
274282 .with_writer(std::io::stderr)
275− .with_filter(LevelFilter::INFO);
276− let subscriber = tracing_subscriber::registry()
277− .with(filter)
278− .with(stderr_layer);
283+ .with_filter(stderr_filter);
284+ let subscriber = tracing_subscriber::registry().with(stderr_layer);
279285 if let Some(file) = file {
280286 let file_layer = fmt::layer()
281287 .with_target(false)
282288 .with_ansi(false)
283− .with_writer(file);
289+ .with_writer(file)
290+ .with_filter(file_filter);
284291 let _ = subscriber.with(file_layer).try_init();
285292 } else {
286293 let _ = subscriber.try_init();
287294 }
295+ Some(handle)
288296 } else {
289297 let stderr_layer = fmt::layer()
290298 .with_target(false)
291299 .with_ansi(ansi)
292300 .with_writer(std::io::stderr)
293− .with_filter(LevelFilter::INFO);
294− let subscriber = tracing_subscriber::registry()
295− .with(filter)
296− .with(stderr_layer);
301+ .with_filter(filter);
302+ let subscriber = tracing_subscriber::registry().with(stderr_layer);
297303 if let Some(file) = file {
298304 let file_layer = fmt::layer()
299305 .with_target(false)
300306 .with_ansi(false)
301− .with_writer(file);
307+ .with_writer(file)
308+ .with_filter(file_filter);
302309 let _ = subscriber.with(file_layer).try_init();
303310 } else {
304311 let _ = subscriber.try_init();
305312 }
313+ None
306314 }
307315}