【发布时间】: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(没有使用),否则您将无法按日期排序。多个线程写入日志呢?您最终可能会遇到异常或数据损坏