StreamWriter теряет строковые символы при записи в файл - PullRequest
0 голосов
/ 27 декабря 2018

Определенные обстоятельства заставили меня написать собственный простой регистратор.Метод записи записей в файл запускается в отдельном потоке и выглядит следующим образом:

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 записать полную строку в файл?

1 Ответ

0 голосов
/ 27 декабря 2018

@ Генерал был прав.У меня много исключений доступа.Ошибка была в моем коде вызова (было создано несколько потоков вместо одного).Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...