ab_cli_utils/
lib.rs

1//! Utilities used in various CLI applications
2
3use std::panic;
4use std::process::exit;
5use tracing::level_filters::LevelFilter;
6use tracing_subscriber::layer::SubscriberExt;
7use tracing_subscriber::util::SubscriberInitExt;
8use tracing_subscriber::{EnvFilter, Layer, fmt};
9
10/// Install a panic handler which exits on panics, rather than unwinding. Unwinding can hang the
11/// tokio runtime waiting for stuck tasks or threads.
12pub fn set_exit_on_panic() {
13    let default_panic_hook = panic::take_hook();
14    panic::set_hook(Box::new(move |panic_info| {
15        default_panic_hook(panic_info);
16        exit(1);
17    }));
18}
19
20/// Initialize logger with typical settings
21pub fn init_logger() {
22    tracing_subscriber::registry()
23        .with(
24            fmt::layer().with_filter(
25                EnvFilter::builder()
26                    .with_default_directive(LevelFilter::INFO.into())
27                    .from_env_lossy(),
28            ),
29        )
30        .init();
31}