//! ## 日志初始化 //! //! ### 两种模式 //! - **终端模式** — 彩色输出到 stderr,适合开发调试 //! - **文件模式** (`with_file=true`) — 同时输出到终端和日滚文件 //! `~/.ias/logs/ias.log.YYYY-MM-DD` //! //! 日志级别通过 `RUST_LOG` 环境变量控制(默认 `info`)。 use std::path::PathBuf; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; use tracing_subscriber::EnvFilter; /// ## 日志初始化 /// /// ### 两种模式 /// * **终端模式** — 彩色输出到 stderr,适合开发调试 /// * **文件模式** (`with_file=true`) — 同时输出到终端和日滚文件 /// `~/.ias/logs/ias.log.YYYY-MM-DD` /// /// 日志级别通过 `RUST_LOG` 环境变量控制(默认 `info`)。 pub fn init_logger(log_dir: Option<&str>, with_file: bool) { let env_filter = EnvFilter::try_from_default_env() .unwrap_or_else(|_| EnvFilter::new("info")); let terminal = tracing_subscriber::fmt::layer() .with_target(false) .with_ansi(true); if with_file && let Some(dir) = log_dir { let dir_path = PathBuf::from(dir); std::fs::create_dir_all(&dir_path).ok(); let file_appender = tracing_appender::rolling::daily(&dir_path, "ias.log"); let file_layer = tracing_subscriber::fmt::layer() .with_target(false) .with_ansi(false) .with_writer(file_appender); tracing_subscriber::registry() .with(env_filter) .with(terminal) .with(file_layer) .init(); return; } tracing_subscriber::registry() .with(env_filter) .with(terminal) .init(); }