技术方案概述:
chrono:一个用于Rust的强大日期和时间库,提供时间处理的全面功能。查看详情log:一个轻量级、灵活的Rust日志框架,适用于各种日志需求。查看详情path::PathBuf,env,fs::OpenOptions:这些是Rust的基础库,用于处理文件路径、环境变量和文件操作。time:提供日期和时间功能的库,与Rust标准库完全兼容。查看详情
代码详解与配置
-
Cargo.toml 配置
log = "0.4.8" chrono = "0.4" time = "0.3" -
获取执行路径 用于获取当前程序的可执行文件路径。若获取失败,程序将崩溃并显示错误信息。
use chrono::Local; use log::LevelFilter; use simplelog::*; use std::{env, path::PathBuf, fs::OpenOptions}; use time::UtcOffset; pub fn get_executable_path() -> PathBuf { env::current_exe().expect("无法获取可执行路径") } -
创建日志文件 根据当前日期创建日志文件,如果文件已存在,则不重复创建。
/// 获取当前可执行文件的路径,并在其父目录下创建名为"log"的目录。 /// 使用本地日期格式化为"YYYY-MM-DD"来创建日志文件名。 pub fn create_log_file() -> Result<std::fs::File, std::io::Error> { let exe_path = get_executable_path(); let log_dir = exe_path.parent().unwrap().join("log"); let date = Local::now().format("%Y-%m-%d").to_string(); let log_dir_path = log_dir.join(format!("{}.log", date)); OpenOptions::new().write(true).create(true).append(true).open(log_dir_path) } -
初始化日志系统 初始化日志系统,确保日志目录存在,使用UTC+8时间偏移,并定制日志时间格式。
/// 确保日志目录存在,并初始化日志系统 pub fn init_logging() { let log_file = create_log_file(); let offset = UtcOffset::from_hms(8, 0, 0).unwrap(); match log_file { Ok(_file) => WriteLogger::init(LevelFilter::Info, ConfigBuilder::new() .set_time_offset(offset) .set_time_format_custom(format_description!("[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]")) .set_target_level(LevelFilter::Off) .set_thread_level(LevelFilter::Off) .build(), _file).expect("错误"), Err(err) => println!("日志文件创建失败: {:?}", err), } } -
日志级别设置 根据指定的日志级别记录信息。
fn set_logs(level: String, message: String) { match level.as_str() { "info" => log::info!("{}", message), "error" => log::error!("{}", message), "warn" => log::warn!("{}", message), "debug" => log::debug!("{}", message), _ => log::trace!("{}", message), } } fn main() { init_logging(); set_logs("info".to_string(), "这是第一条日志".to_string()); }