using System;
using System.IO;
using System.Threading;
public static class LogManager
{
private static readonly object _fileLock = new object();
private const int MaxFiles = 100;
private const string LogDirectory = "Logs";
private const string FilePrefix = "log_";
private const string FileExtension = ".txt";
public static void SaveMessageWithRotation(string message)
{
try
{
Directory.CreateDirectory(LogDirectory);
lock (_fileLock)
{
string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmssfff");
string newFilePath = Path.Combine(LogDirectory, $"{FilePrefix}{timestamp}{FileExtension}");
File.WriteAllText(newFilePath, message);
ThreadPool.QueueUserWorkItem(_ => CleanOldLogs());
}
}
catch (Exception ex)
{
Console.WriteLine($"日志写入失败: {ex.Message}");
}
}
private static void CleanOldLogs()
{
try
{
var directory = new DirectoryInfo(LogDirectory);
if (!directory.Exists) return;
var files = directory.GetFiles($"{FilePrefix}*{FileExtension}")
.OrderBy(f => f.CreationTime)
.ToArray();
if (files.Length > MaxFiles)
{
foreach (var file in files.Take(files.Length - MaxFiles))
{
try { file.Delete(); }
catch { }
}
}
}
catch
{
}
}
}