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
|
{
|
/// <summary>
|
/// 自动日志清理
|
/// </summary>
|
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;
|
}
|
}
|
}
|
}
|