55 lines
1.8 KiB
Rust
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();
|
|
}
|