马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |