tangle_indexer


git clone https://radroots.dev/git/tangle_indexer.git
Log | Files | Refs | Submodules | LICENSE

telemetry.rs (1788B)


      1 use std::path::Path;
      2 use tracing_appender::non_blocking::WorkerGuard;
      3 use tracing_appender::rolling;
      4 use tracing_subscriber::{fmt, prelude::*, EnvFilter, Registry};
      5 
      6 #[cfg(feature = "audit")]
      7 use tracing_subscriber::filter::Targets;
      8 
      9 pub struct TelemetryGuards {
     10     _file: WorkerGuard,
     11     _audit: Option<WorkerGuard>,
     12 }
     13 
     14 pub fn init(logs_dir: impl AsRef<Path>) -> TelemetryGuards {
     15     let logs_path = logs_dir.as_ref();
     16     if let Err(e) = std::fs::create_dir_all(logs_path) {
     17         eprintln!("Failed to create logs directory {}: {}", logs_path.display(), e);
     18     }
     19 
     20     let file_appender = rolling::daily(logs_path, concat!(env!("CARGO_PKG_NAME"), ".log"));
     21     let (file_writer, guard) = tracing_appender::non_blocking(file_appender);
     22 
     23     let stdout_layer = fmt::layer().with_writer(std::io::stdout).with_target(false);
     24 
     25     let file_layer = fmt::layer()
     26         .with_writer(file_writer)
     27         .with_ansi(false)
     28         .with_target(false);
     29 
     30     let subscriber = Registry::default()
     31         .with(EnvFilter::from_default_env())
     32         .with(stdout_layer)
     33         .with(file_layer);
     34 
     35     #[cfg(feature = "audit")]
     36     let (subscriber, audit_guard) = {
     37         let audit_app = rolling::daily(logs_path, "audit.log");
     38         let (audit_writer, guard) = tracing_appender::non_blocking(audit_app);
     39 
     40         let audit_layer = fmt::layer()
     41             .with_writer(audit_writer)
     42             .with_ansi(false)
     43             .with_target(true)
     44             .with_filter(Targets::new().with_target("audit", tracing::Level::INFO));
     45 
     46         (subscriber.with(audit_layer), Some(guard))
     47     };
     48 
     49     #[cfg(not(feature = "audit"))]
     50     let (subscriber, audit_guard) = (subscriber, None);
     51 
     52     subscriber.init();
     53     TelemetryGuards {
     54         _file: guard,
     55         _audit: audit_guard,
     56     }
     57 }