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
58 lines
1.9 KiB
using System.IO; |
|
using System.IO.Compression; |
|
|
|
namespace SparkClient.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}"); |
|
} |
|
} |