eye_config 0.5.1

A configuration persistence library and CLI tool.
Documentation
use crate::cli::global_args::GlobalArgs;
use tracing::level_filters::LevelFilter;
use tracing_subscriber::EnvFilter;
use tracing_subscriber::fmt::MakeWriter;
use tracing_subscriber::fmt::SubscriberBuilder;
use tracing_subscriber::fmt::format::FmtSpan;
use tracing_subscriber::fmt::time::SystemTime;
use tracing_subscriber::util::SubscriberInitExt;

pub fn init_tracing(
    global_args: &GlobalArgs,
    writer: impl for<'writer> MakeWriter<'writer> + Send + Sync + 'static,
) -> eyre::Result<()> {
    let mine = SubscriberBuilder::default()
        .with_file(cfg!(debug_assertions))
        .with_line_number(cfg!(debug_assertions))
        .with_level(true)
        .with_target(false)
        .with_ansi(true)
        .with_thread_ids(false)
        .with_thread_names(false)
        .with_span_events(FmtSpan::NONE)
        .with_timer(SystemTime)
        .with_writer(writer)
        .with_env_filter(EnvFilter::try_from_default_env().unwrap_or_else(|_| {
            let determined_default_log_level = match global_args.debug {
                true => LevelFilter::DEBUG,
                false => LevelFilter::INFO,
            };

            let filter_string = {
                #[cfg(feature = "bevy")]
                {
                    format!(
                        "{},{}",
                        determined_default_log_level,
                        bevy_log::DEFAULT_FILTER
                    )
                }
                #[cfg(not(feature = "bevy"))]
                {
                    format!("{determined_default_log_level}")
                }
            };
            EnvFilter::builder().parse_lossy(filter_string)
        }));
    let subscriber = mine.finish();
    subscriber.init();
    Ok(())
}