Определенные обстоятельства заставили меня написать собственный простой регистратор.Метод записи записей в файл запускается в отдельном потоке и выглядит следующим образом:
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.IO;
using System.Text;
private ConcurrentQueue<Event> OccuredEvents { get; }
private void Work()
{
using (FileStream fs = new FileStream (filename, FileMode.Append,
FileAccess.Write, FileShare.ReadWrite)
{
using (StreamWriter writer = new StreamWriter(fs))
{
while (OccuredEvents.TryDequeue(out Event currentEvent))
{
writer.WriteLine(currentEvent.ToString());
writer.Flush();
}
}
}
}
Иногда в файлах появляются такие записи:
27.12.2018 08:49:13 [3e2291e2-a489-45ed-b169-fcc6b7bd1eda] [INFO] AcceptCallback - Client accepted (172.23.64.31:49820)
:49:13 [3e2291e2-a489-45ed-b169-fcc6b7bd1eda] [INFO] GenerateResponse - AliveCommand | Data | AccountName: DOMAIN_KVC\07221147
или:
27.12.2018 08:49:13 [3e2291e2-a489-45ed-b169-fcc6b7bd1eda] [INFO] GenerateResponse - AliveCommand | Data | A27.12.2018 08:49:13 [3e2291e2-a489-45ed-b169-fcc6b7bd1eda] [INFO] AcceptCallback - Client accepted (172.23.7.86:49593)
Как видно, часть записи потеряна или перекрывает другую.Появление таких аномалий зависит от количества записей.Приложения с интенсивным ведением журнала создают большинство этих «заглушек».
В чем моя ошибка?Как заставить StreamWriter записать полную строку в файл?