use std::env;
use time::macros::{format_description, offset};
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::filter::LevelFilter;
use tracing_subscriber::fmt::time::OffsetTime;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::{fmt, EnvFilter};
pub fn trace_log_init() {
let app_name = env::var("CARGO_PKG_NAME").unwrap_or_else(|_| "default_rust".to_string());
let app_name_log = app_name.clone() + ".log";
let file_appender = RollingFileAppender::new(
Rotation::DAILY, "/var/log/rust", app_name_log, );
let time_fmt =
format_description!("[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]");
let timer = OffsetTime::new(offset!(+8), time_fmt);
let file_layer = fmt::Layer::new()
.with_writer(file_appender)
.with_timer(timer.clone())
.with_ansi(false);
let stdout_layer = fmt::Layer::new()
.with_writer(std::io::stdout)
.with_timer(timer.clone());
let subscriber = tracing_subscriber::registry()
.with(EnvFilter::from_default_env().add_directive(LevelFilter::INFO.into()))
.with(file_layer)
.with(stdout_layer);
tracing::subscriber::set_global_default(subscriber).expect("Failed to set subscriber");
}