|
@@ -1,13 +1,14 @@
|
|
|
use crate::config::*;
|
|
|
use crate::utils::{dirs, help};
|
|
|
use anyhow::Result;
|
|
|
-use chrono::Local;
|
|
|
+use chrono::{DateTime, Local};
|
|
|
use log::LevelFilter;
|
|
|
use log4rs::append::console::ConsoleAppender;
|
|
|
use log4rs::append::file::FileAppender;
|
|
|
use log4rs::config::{Appender, Logger, Root};
|
|
|
use log4rs::encode::pattern::PatternEncoder;
|
|
|
-use std::fs;
|
|
|
+use std::fs::{self, DirEntry};
|
|
|
+use std::str::FromStr;
|
|
|
use tauri::PackageInfo;
|
|
|
|
|
|
/// initialize this instance's log file
|
|
@@ -69,6 +70,72 @@ fn init_log() -> Result<()> {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
+/// 删除log文件
|
|
|
+pub fn delete_log() -> Result<()> {
|
|
|
+ let log_dir = dirs::app_logs_dir()?;
|
|
|
+ if !log_dir.exists() {
|
|
|
+ return Ok(());
|
|
|
+ }
|
|
|
+
|
|
|
+ let auto_log_clean = {
|
|
|
+ let verge = Config::verge();
|
|
|
+ let verge = verge.data();
|
|
|
+ verge.auto_log_clean.clone().unwrap_or(0)
|
|
|
+ };
|
|
|
+
|
|
|
+ let day = match auto_log_clean {
|
|
|
+ 1 => 7,
|
|
|
+ 2 => 30,
|
|
|
+ 3 => 90,
|
|
|
+ _ => return Ok(()),
|
|
|
+ };
|
|
|
+
|
|
|
+ log::debug!(target: "app", "try to delete log files, day: {day}");
|
|
|
+
|
|
|
+ // %Y-%m-%d to NaiveDateTime
|
|
|
+ let parse_time_str = |s: &str| {
|
|
|
+ let sa: Vec<&str> = s.split('-').collect();
|
|
|
+ if sa.len() != 4 {
|
|
|
+ return Err(anyhow::anyhow!("invalid time str"));
|
|
|
+ }
|
|
|
+
|
|
|
+ let year = i32::from_str(sa[0])?;
|
|
|
+ let month = u32::from_str(sa[1])?;
|
|
|
+ let day = u32::from_str(sa[2])?;
|
|
|
+ let time = chrono::NaiveDate::from_ymd_opt(year, month, day)
|
|
|
+ .ok_or(anyhow::anyhow!("invalid time str"))?
|
|
|
+ .and_hms_opt(0, 0, 0)
|
|
|
+ .ok_or(anyhow::anyhow!("invalid time str"))?;
|
|
|
+ Ok(time)
|
|
|
+ };
|
|
|
+
|
|
|
+ let process_file = |file: DirEntry| -> Result<()> {
|
|
|
+ let file_name = file.file_name();
|
|
|
+ let file_name = file_name.to_str().unwrap_or_default();
|
|
|
+
|
|
|
+ if file_name.ends_with(".log") {
|
|
|
+ let now = Local::now();
|
|
|
+ let created_time = parse_time_str(&file_name[0..file_name.len() - 4])?;
|
|
|
+ let file_time = DateTime::<Local>::from_local(created_time, now.offset().clone());
|
|
|
+
|
|
|
+ let duration = now.signed_duration_since(file_time);
|
|
|
+ if duration.num_days() > day {
|
|
|
+ let file_path = file.path();
|
|
|
+ let _ = fs::remove_file(file_path);
|
|
|
+ log::info!(target: "app", "delete log file: {file_name}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Ok(())
|
|
|
+ };
|
|
|
+
|
|
|
+ for file in fs::read_dir(&log_dir)? {
|
|
|
+ if let Ok(file) = file {
|
|
|
+ let _ = process_file(file);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Ok(())
|
|
|
+}
|
|
|
+
|
|
|
/// Initialize all the config files
|
|
|
/// before tauri setup
|
|
|
pub fn init_config() -> Result<()> {
|
|
@@ -78,6 +145,7 @@ pub fn init_config() -> Result<()> {
|
|
|
}
|
|
|
|
|
|
let _ = init_log();
|
|
|
+ let _ = delete_log();
|
|
|
|
|
|
crate::log_err!(dirs::app_home_dir().map(|app_dir| {
|
|
|
if !app_dir.exists() {
|