You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中File.WriteAllTextAsync无法写入Exception.Message至日志文件求助

日志写入异常问题修复方案

核心问题分析

  1. 异步操作未等待:File.WriteAllTextAsync是异步方法,代码中未使用await关键字等待操作完成,后续的Thread.Sleep和Environment.Exit(0)会直接终止程序,导致写入操作还未执行就被中断。
  2. 文件流冲突:在using (FileStream fs = File.Create(pathString))块内调用WriteAllTextAsync,此时文件流未释放,文件处于锁定状态,写入操作无法正常执行。
  3. 路径变量不一致:代码中创建文件用pathString,写入用fileName,若两个变量指向不同路径,会导致日志写入到错误位置或创建空文件。

修复后的代码示例

同步版本(更适合控制台场景)

catch (Exception e)
{
    if (logs)
    {
        Console.WriteLine("Error detected, saved to logs.");
        // 统一日志文件路径变量,确保创建和写入路径一致
        string logFilePath = fileName; // 若pathString是正确路径,替换为pathString
        // 创建文件后立即释放流,避免锁定
        if (!File.Exists(logFilePath))
        {
            File.Create(logFilePath).Dispose();
        }
        // 使用AppendAllText保留历史日志,添加换行便于阅读
        File.AppendAllText(logFilePath, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.Message}{Environment.NewLine}");
        Console.WriteLine("Closing in 5 seconds.");
        Thread.Sleep(5000);
        Environment.Exit(0);
    }
    else
    {
        Console.WriteLine("Error detected, closing in 5 seconds.");
        Thread.Sleep(5000);
        Environment.Exit(0);
    }
}

异步版本(需确保方法标记为async)

catch (Exception e)
{
    if (logs)
    {
        Console.WriteLine("Error detected, saved to logs.");
        string logFilePath = fileName;
        if (!File.Exists(logFilePath))
        {
            await File.CreateAsync(logFilePath);
        }
        await File.AppendAllTextAsync(logFilePath, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {e.Message}{Environment.NewLine}");
        Console.WriteLine("Closing in 5 seconds.");
        Thread.Sleep(5000);
        Environment.Exit(0);
    }
    else
    {
        Console.WriteLine("Error detected, closing in 5 seconds.");
        Thread.Sleep(5000);
        Environment.Exit(0);
    }
}

额外优化建议

  • 统一日志路径变量,避免pathString和fileName混淆,减少路径错误风险。
  • 日志中添加时间戳,便于追踪错误发生时间。
  • 若需更健壮的日志功能,可考虑使用第三方日志库(如Serilog、NLog),简化日志操作并提供更多功能。

内容的提问来源于stack exchange,提问作者ThatOneHen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:10:32