rust-cutil 1.0.250090502

cutil
Documentation
use time::macros::format_description;
use time::UtcOffset;
use tracing_appender::non_blocking::WorkerGuard;
use tracing_appender::{non_blocking, rolling};
use tracing_error::ErrorLayer;
use tracing_subscriber::filter::LevelFilter;
use tracing_subscriber::fmt::time::OffsetTime;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::{fmt, layer::SubscriberExt, prelude::*};
use tracing_subscriber::{Layer, Registry};

static mut _WORKER_GUARD: Option<WorkerGuard> = None;

pub fn configure(level: LevelFilter, bucket_path: String, app_name: String) {
  let local_time = OffsetTime::new(
    UtcOffset::from_hms(8, 0, 0).unwrap_or(UtcOffset::UTC),
    format_description!("[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]"),
  );
  let console_layer = fmt::layer()
    .pretty()
    .with_timer(local_time.clone())
    .with_writer(std::io::stdout)
    .with_filter(level);

  let file_appender = rolling::daily(format!("{}/log/", bucket_path), format!("{}.log", app_name));
  let (non_blocking_appender, _guard) = non_blocking(file_appender);
  unsafe {
    _WORKER_GUARD = Some(_guard);
  }

  let file_layer = fmt::layer()
    .with_timer(local_time.clone())
    .with_ansi(false)
    .with_writer(non_blocking_appender)
    .with_filter(LevelFilter::INFO);

  Registry::default()
    .with(ErrorLayer::default())
    .with(console_layer)
    .with(file_layer)
    .init();
}