t_trace 0.1.3

High-performance, command-line statistics tracker for your shell
Documentation
use anyhow::Result;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{EnvFilter, fmt};

pub fn setup_daemon_logging() -> Result<tracing_appender::non_blocking::WorkerGuard> {
    let data_dir = dirs::data_local_dir()
        .expect("Could not find local data directory")
        .join("t_trace");
    std::fs::create_dir_all(&data_dir)?;

    let log_file_path = data_dir.join("daemon.log");
    let file_appender = tracing_appender::rolling::never(data_dir, "daemon.log");
    let (non_blocking_appender, guard) = tracing_appender::non_blocking(file_appender);

    let subscriber = tracing_subscriber::registry()
        .with(
            fmt::layer()
                .with_writer(non_blocking_appender)
                .with_ansi(false),
        )
        .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")));

    tracing::subscriber::set_global_default(subscriber)
        .expect("Unable to set global default subscriber");

    tracing::info!(
        "Daemon logging configured to write to a single file: {:?}",
        log_file_path
    );

    Ok(guard)
}