【问题标题】:When i try to append text to a log file, my log file becomes empty [duplicate]当我尝试将文本附加到日志文件时,我的日志文件变为空 [重复]
【发布时间】:2022-01-27 10:03:12
【问题描述】:

我正在尝试检查是否存在具有相同名称的日志文件,如果存在,我想在当前日志文件中追加,但如果不存在,我想使用当前日期创建一个新的日志文件。应用程序正在运行。问题是当我尝试追加到我已经存在的日志文件时,日志文件变为空。

 string logFileLocation = Application.UserAppDataPath + "\\ cvDiagnostics_log_30-01-2022.text";

     StreamWriter logFileStream = new StreamWriter(new FileStream(logFileLocation, FileMode.Create));

     List<OutputEntry> outputMessages = new List<OutputEntry>();
     outputMessages.AddRange(logInfoOutputMessages);
     outputMessages.AddRange(logDebugOutputMessages);
     outputMessages.AddRange(logWarningOutputMessages);
     outputMessages.AddRange(logErrorOutputMessages);
     outputMessages = outputMessages.OrderBy(e => e.DisplayedTimeStamp).ToList();

     logFileStream.WriteLine( DateTime.Now.ToString());

     foreach (var message in outputMessages)
     {
        logFileStream.WriteLine(message.ToString());
     }

这是我尝试检查并附加到现有日志文件:

         if (File.Exists(logFileLocation))
     {
        File.AppendAllText(logFileLocation, outputMessages.ToString());
     }
  }
        else
        {
           File.Create(logFileLocation + DateTime.Now.ToString());
        }

【问题讨论】:

  • 您使用的是 FileMode.Create 而不是 FileMode.Append
  • 您需要将append:true 传递给StreamWriter 构造函数使用FileMode.Append。真正的解决方案是使用日志库,例如 Serilog。日志记录远比将行附加到文本文件要复杂得多。例如,您将如何处理那些 localized 字符串?除非您的语言环境使用 ISO8601(没有使用),否则您将无法按日期排序。多个线程写入日志呢?您最终可能会遇到异常或数据损坏

标签: c# file logging


【解决方案1】:

要打开文件,请打开 FileStreamFileMode.Create。如果文件已经存在,这将截断文件。

 StreamWriter logFileStream = new StreamWriter(new FileStream(logFileLocation, FileMode.Create));

将其更改为:

 StreamWriter logFileStream = new StreamWriter(new FileStream(logFileLocation, FileMode.Append));

来自 FileMode.Create 上的documentation

"指定操作系统要新建一个文件,如果文件已经存在则覆盖,这个需要Write权限。FileMode.Create相当于请求如果文件不存在就使用CreateNew;否则,使用Truncate。如果文件已经存在但为隐藏文件,则抛出UnauthorizedAccessException异常。"

【讨论】:

  • 谢谢,我将 FileMode 更改为追加,现在它正在追加到我现有的日志文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2020-03-30
相关资源
最近更新 更多