yao-dev-common 0.1.10

Common library
Documentation
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};

/// 初始化日志配置
///
/// stdout_layer 配置工作台输出
///
/// file_layer 配置文件滚动输出
///
/// tracing_subscriber 注册全局
///
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");
}