c# 简朴实现将Message的内容保存到txt中,超过100个则清理旧文件
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"; // 文件扩展名
/// <summary>
/// 安全写入日志(自动处理文件滚动和清理)
/// </summary>
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)
{
// 这里应该用真正的日志系统记录错误(如NLog)
Console.WriteLine($"日志写入失败: {ex.Message}");
}
}
/// <summary>
/// 清理旧日志文件(保留最新100个)
/// </summary>
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
{
// 清理失败不影响主流程
}
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]