c# 简朴实现将Message的内容保存到txt中,超过100个则清理旧文件 ...

打印 上一主题 下一主题

主题 1675|帖子 1675|积分 5025

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. using System;
  2. using System.IO;
  3. using System.Threading;
  4. public static class LogManager
  5. {
  6.     private static readonly object _fileLock = new object(); // 线程安全锁
  7.     private const int MaxFiles = 100;                        // 最大文件数限制
  8.     private const string LogDirectory = "Logs";              // 日志目录
  9.     private const string FilePrefix = "log_";                // 文件名前缀
  10.     private const string FileExtension = ".txt";             // 文件扩展名
  11.     /// <summary>
  12.     /// 安全写入日志(自动处理文件滚动和清理)
  13.     /// </summary>
  14.     public static void SaveMessageWithRotation(string message)
  15.     {
  16.         try
  17.         {
  18.             // 确保日志目录存在
  19.             Directory.CreateDirectory(LogDirectory);
  20.             // 线程安全操作
  21.             lock (_fileLock)
  22.             {
  23.                 // 生成带时间戳的新文件名
  24.                 string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmssfff");
  25.                 string newFilePath = Path.Combine(LogDirectory, $"{FilePrefix}{timestamp}{FileExtension}");
  26.                 // 写入新文件
  27.                 File.WriteAllText(newFilePath, message);
  28.                 // 执行文件清理(异步不阻塞当前操作)
  29.                 ThreadPool.QueueUserWorkItem(_ => CleanOldLogs());
  30.             }
  31.         }
  32.         catch (Exception ex)
  33.         {
  34.             // 这里应该用真正的日志系统记录错误(如NLog)
  35.             Console.WriteLine($"日志写入失败: {ex.Message}");
  36.         }
  37.     }
  38.     /// <summary>
  39.     /// 清理旧日志文件(保留最新100个)
  40.     /// </summary>
  41.     private static void CleanOldLogs()
  42.     {
  43.         try
  44.         {
  45.             var directory = new DirectoryInfo(LogDirectory);
  46.             if (!directory.Exists) return;
  47.             // 获取所有日志文件并按创建时间排序
  48.             var files = directory.GetFiles($"{FilePrefix}*{FileExtension}")
  49.                                .OrderBy(f => f.CreationTime)
  50.                                .ToArray();
  51.             // 删除超出数量的旧文件
  52.             if (files.Length > MaxFiles)
  53.             {
  54.                 foreach (var file in files.Take(files.Length - MaxFiles))
  55.                 {
  56.                     try { file.Delete(); }
  57.                     catch { /* 忽略删除失败 */ }
  58.                 }
  59.             }
  60.         }
  61.         catch
  62.         {
  63.             // 清理失败不影响主流程
  64.         }
  65.     }
  66. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表