Простой потокобезопасный неблокирующий класс файлового логгера в c # - PullRequest
1 голос
/ 15 июля 2009

У меня есть веб-приложение, которое записывает некоторую информацию в файл. Я ищу простой потокобезопасный неблокирующий класс файлового регистратора в c #. У меня мало опыта работы с потоками. Я знаю, что есть отличные компоненты ведения журналов, такие как log4Net, Enterprise Library Logging Block, ELMAH, но я не хочу внешней зависимости для моего приложения. Я думал об использовании этой реализации очереди http://www.codeproject.com/KB/cpp/lockfreeq.aspx

Ответы [ 3 ]

1 голос
/ 15 июля 2009

, если вы не хотите использовать внешнюю библиотеку, вы можете использовать Trace class

0 голосов
/ 15 июля 2009

Я сделал простой механизм регистрации в моем проекте в офисе.

У меня есть общий журнал (Static C #).

Внутри этого класса у меня есть Синхронизированная очередь, и у нее есть собственный поток.

Тогда внутри этой темы я просто использую AutoresetEvent с вашим собственным определенным WaitTime (я использую 250 мс).

Затем, когда истекает время этого ResetEvent, я собираю то, что в данный момент находится в очереди (используя DeQueue), и записываю каждое в файл.

Вещи, о которых нужно помнить ... Имейте класс или структуру, которая может содержать дату, когда вход вошел, а не время, когда вы записывали на диск, в случае, если вы выберете более длительное время для сна вашего потока.

Если вы хотите, чтобы ваше приложение быстро завершало работу, предоставьте метод, который установит событие, чтобы оно выпало из сна и изящно завершило работу.

0 голосов
/ 15 июля 2009

Метод FileStream.BeginWrite помещает операцию записи в поток, управляемый системой. Это легко.

Если вы поместите ваши сообщения в синхронизированную очередь и у вас будет метод EndWrite, который вытянет следующий элемент из очереди, тогда все ваши журналы будут вне потока, если речь идет о приложении.

Последний шаг заключается в переносе сообщений в очередь для установки события, так что если очередь пуста, когда EndWrite ищет следующее сообщение, она может подождать, пока событие не будет установлено.

...