using HMI.Core.Setting; using HMI.Core.Util; using log4net; using System; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Timers; namespace WPFProject.Utils { public class LogCleanner { private ILog log = LogManager.GetLogger("LogCleanner"); private long ms = 24 * 60 * 60 * 1000; private string[] _fileExtensions = new string[] { ".log", ".db" }; private string _filePrefix = "log"; private Timer timer; public LogCleanner() { timer = new Timer(); timer.Interval = ms; timer.Elapsed += Timer_Elapsed; timer.Enabled = true; Task.Run(() => { Clean(); }); } private void Clean() { int days = SystemSetting.Instance.LogExpiredDays; if (days == null || days <= 0) return; // 计算截止日期 DateTime cutoffDate = DateTime.Now.AddDays(-days); string folder1 = PathHelper.LogViewerDir; // 检查目录是否存在 if (Directory.Exists(folder1)) { // 获取所有符合条件的文件 var files = Directory.GetFiles(folder1) .Where(file => Path.GetFileName(file).StartsWith(_filePrefix, StringComparison.OrdinalIgnoreCase) && _fileExtensions.Any(ext => file.EndsWith(ext, StringComparison.OrdinalIgnoreCase)) && File.GetLastWriteTime(file) < cutoffDate) .ToList(); foreach (var file in files) { try { File.Delete(file); } catch (Exception ex) { log.Warn($"LogFile:{file} Delete Failed.", ex); } } } folder1 = Path.Combine(PathHelper.AppFolder, "Log"); // 检查目录是否存在 if (Directory.Exists(folder1)) { // 获取所有符合条件的文件 var files = Directory.GetFiles(folder1) .Where(file => Path.GetFileName(file).StartsWith(_filePrefix, StringComparison.OrdinalIgnoreCase) && _fileExtensions.Any(ext => file.EndsWith(ext, StringComparison.OrdinalIgnoreCase)) && File.GetLastWriteTime(file) < cutoffDate) .ToList(); foreach (var file in files) { try { File.Delete(file); } catch (Exception ex) { log.Warn($"LogFile:{file} Delete Failed.", ex); } } } } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { try { timer.Enabled = false; Clean(); log.Info("Clean Log File Success."); } catch (System.Exception ex) { log.Error("Clean Log File Failed.", ex); } finally { timer.Enabled = true; } } } }