Files
iAs/src/logger.rs
T

55 lines
1.8 KiB
Rust

//! ## 日志初始化
//!
//! ### 两种模式
//! - **终端模式** — 彩色输出到 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();
}