ew/src/logger.rs

67 lines
1.7 KiB
Rust

use log::{debug, error, info, warn, LevelFilter};
use simplelog::*;
use std::fs::{create_dir_all, File, OpenOptions};
use std::path::Path;
const MAX_LOG_SIZE: u64 = 50 * 1024 * 1024;
const LOG_FILE_PATH: &str = "data/rust.log";
pub fn init_logger() {
let mut builder = ConfigBuilder::new();
builder.set_time_offset_to_local().unwrap();
let config = builder.build();
// 获取文件的目录路径
let dir = Path::new(LOG_FILE_PATH).parent().unwrap();
// 检查并创建目录
if !dir.exists() {
create_dir_all(dir).unwrap();
}
let file = OpenOptions::new()
.write(true)
.append(true)
.create(true)
.open(LOG_FILE_PATH).unwrap();
CombinedLogger::init(
vec![
TermLogger::new(LevelFilter::Info, config.clone(), TerminalMode::Mixed, ColorChoice::Auto),
WriteLogger::new(LevelFilter::Info, config.clone(), file),
]
).unwrap();
}
// 检查文件大小并清空文件(如果超出限制)
fn check_and_clear_log_file() {
let metadata = std::fs::metadata(LOG_FILE_PATH).unwrap();
if metadata.len() > MAX_LOG_SIZE {
// 清空文件
File::create(LOG_FILE_PATH).expect(&format!("Can't re-create file {}", LOG_FILE_PATH));
}
}
#[allow(dead_code)]
pub fn debug(message: &str) {
check_and_clear_log_file();
debug!("{}", message);
}
#[allow(dead_code)]
pub fn info(message: &str) {
check_and_clear_log_file();
info!("{}", message);
}
#[allow(dead_code)]
pub fn warn(message: &str) {
check_and_clear_log_file();
warn!("{}", message);
}
#[allow(dead_code)]
pub fn error(message: &str) {
check_and_clear_log_file();
error!("{}", message);
}