You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.9 KiB

using System.IO;
using System.IO.Compression;
namespace BrilliantSightClient.Model.Helper;
public class Log4NetHelper
{
/// <summary>
/// 归档上月日志文件
/// </summary>
public static void ArchiveOldLogs()
{
string logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
string archiveDirectory = Path.Combine(logDirectory, "history");
// 确保归档目录存在
if (!Directory.Exists(archiveDirectory))
{
Directory.CreateDirectory(archiveDirectory);
}
// 获取上个月日期
DateTime now = DateTime.Now;
DateTime lastMonth = new DateTime(now.Year, now.Month, 1).AddMonths(-1);
string lastMonthPattern = lastMonth.ToString("yyyy-MM");
// 压缩文件路径
string zipFilePath = Path.Combine(archiveDirectory, $"{lastMonthPattern}.zip");
if (!File.Exists(zipFilePath))
{
// 创建压缩文件
using (var zipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create))
{
foreach (string file in Directory.GetFiles(logDirectory, $"{lastMonthPattern}-*.log"))
{
// 将日志文件添加到压缩包中
zipArchive.CreateEntryFromFile(file, Path.GetFileName(file));
File.Delete(file); // 删除源文件
}
}
}
// 删除三个月以上的归档日志
DateTime cutoffDate = now.AddMonths(-3);
var zipFiles = Directory.GetFiles(archiveDirectory, "*.zip");
foreach (var file in zipFiles)
{
var fileInfo = new FileInfo(file);
if (fileInfo.LastWriteTimeUtc < cutoffDate)
{
File.Delete(file);
Console.WriteLine($"Deleted old archive: {file}");
}
}
Console.WriteLine($"Archived logs to {zipFilePath}");
}
}