using System; using System.IO; using System.Threading; // 建议放在单独的文件或命名空间底部 public static class LogHelper { // 定义日志文件夹路径(例如:项目目录下的 Logs 文件夹) private static readonly string LogDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs"); // 确保文件夹存在 static LogHelper() { if (!Directory.Exists(LogDirectory)) { Directory.CreateDirectory(LogDirectory); } } /// /// 写入日志到TXT文件 /// /// 日志内容 /// 日志级别 (Error, Warn, Info) public static void WriteLog(string message, string level = "Info") { try { // 生成文件名:Log_2023-10-05.txt string fileName = $"Log_{DateTime.Now:yyyy-MM-dd}.txt"; string filePath = Path.Combine(LogDirectory, fileName); // 构建日志行 // [2023-10-05 14:30:25] [Error] 发生了xxx错误 string logLine = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] [{level}] {message}{Environment.NewLine}"; // 使用 FileStream 以追加模式写入,支持多线程安全写入 // 注意:这里使用了锁,防止多线程同时写入冲突 lock (typeof(LogHelper)) { using (var stream = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) using (var writer = new StreamWriter(stream)) { writer.Write(logLine); } } } catch (Exception ex) { // 防止日志系统自身崩溃导致程序异常,这里只用 Debug 输出错误(或者什么都不做) // Debug.WriteLine($"日志写入失败: {ex.Message}"); } } // 为了方便,可以封装几个常用方法 public static void Error(string message) => WriteLog(message, "ERROR"); public static void Warn(string message) => WriteLog(message, "WARN"); public static void Info(string message) => WriteLog(message, "INFO"); }