Skip to main content

data_beans/aux/
logging.rs

1//! Shared logger setup for the workspace.
2//!
3//! The progress-bar style and the single [`MULTI_PROGRESS`] now live in
4//! [`legume_numeric::matrix::progress`] — the lowest common dependency, so `data-beans`
5//! and friends can share them without a dependency cycle (this crate depends
6//! *on* `data-beans`, so the primitive can't live here). This module
7//! re-exports [`new_progress_bar`], [`new_spinner`], and [`MULTI_PROGRESS`] so
8//! every existing caller (`data_beans::aux::logging::new_progress_bar`, senna,
9//! graph-embedding-util) keeps working unchanged, and adds [`init_logger`],
10//! which wraps `env_logger` in `indicatif_log_bridge` so `log` output renders
11//! above the bars instead of corrupting them.
12
13pub use legume_numeric::matrix::progress::{new_progress_bar, new_spinner, MULTI_PROGRESS};
14
15/// Install `env_logger` wrapped in `indicatif_log_bridge::LogWrapper` so log
16/// messages render above any active progress bar. `verbose` selects between
17/// `legume_numeric::matrix::common_io::{VERBOSE,QUIET}_LOG_FILTER`; an external `RUST_LOG`
18/// still overrides the default filter.
19pub fn init_logger(verbose: bool) {
20    let default_filter = if verbose {
21        legume_numeric::matrix::common_io::VERBOSE_LOG_FILTER
22    } else {
23        legume_numeric::matrix::common_io::QUIET_LOG_FILTER
24    };
25    let logger =
26        env_logger::Builder::from_env(env_logger::Env::default().default_filter_or(default_filter))
27            .build();
28    let max_level = logger.filter();
29    let _ = indicatif_log_bridge::LogWrapper::new(MULTI_PROGRESS.clone(), logger)
30        .try_init()
31        .map(|()| log::set_max_level(max_level));
32}