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

csharp 复制代码
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
        {
            // 清理失败不影响主流程
        }
    }
}
相关推荐
江山如画,佳人北望9 小时前
C#程序入门
开发语言·windows·c#
与火星的孩子对话10 小时前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
future141210 小时前
C#每日学习日记
java·学习·c#
军训猫猫头14 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
葬歌倾城1 天前
JSON的缩进格式方式和紧凑格式方式
c#·json
Eiceblue1 天前
使用 C# 发送电子邮件(支持普通文本、HTML 和附件)
开发语言·c#·html·visual studio
小小小小王王王1 天前
hello判断
开发语言·c#
金增辉1 天前
基于C#的OPCServer应用开发,引用WtOPCSvr.dll
c#
future14121 天前
C#学习日记
开发语言·学习·c#
傻啦嘿哟2 天前
Python 办公实战:用 python-docx 自动生成 Word 文档
开发语言·c#