Запуск приложений Log4Net в отдельном потоке - PullRequest
4 голосов
/ 25 июня 2010

В настоящее время у меня есть собственная система ведения журналов, где журнал представляет собой очередь, с отдельным потоком, который прослушивает эту очередь и выполняет все реальные операции записи. Система обрабатывает TON сообщений журнала, размер файлов может легко превысить 10 МБ за минуты, поэтому фактическая регистрация в вызывающем потоке невозможна.

Я не могу найти в Интернете ресурсы, показывающие, как будет работать многопоточность в log4net, если log4net уже поддерживает такую ​​архитектуру передачи сообщений или другие подобные функции для работы в многопоточной среде. Существуют ли какие-либо уже существующие функции, которые могут мне помочь?

Возможно ли это без создания оболочки log4net?

Ответы [ 5 ]

1 голос
/ 25 июня 2010

Это неплохая идея.Хитрость заключается в том, чтобы поставить записи в очередь и обработать их в одной очереди.Посмотрите на http://www.drdobbs.com/visualstudio/225700095 для хорошего примера.

1 голос
/ 26 июня 2010

Вы всегда можете посмотреть на исходный код log4net, чтобы исключить подобные вопросы.Это с открытым исходным кодом.

1 голос
/ 25 июня 2010

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

Вы можете попытаться использовать MSMQ (или какую-либо другую технологию очереди), чтобы быстро отправить сообщения журнала другому процессу, который затем выполнит физическую запись в хранилище. Это гарантирует, что сообщения будут отображаться в том же порядке, в котором они были отправлены.

0 голосов
/ 04 сентября 2015

Я с большим успехом использовал ParallelForwardingAppender и AsyncForwardingAppender аппендеры. Эти дополнения доступны из следующего хранилища:

https://github.com/cjbhaines/Log4Net.Async

ParallelForwardingAppender использует BlockingCollection и другие аспекты параллельной библиотеки задач для реализации очереди сообщений без потерь.

AsyncForwardingAppender использует кольцевой буфер и период опроса 10 мс в фоновом потоке для определения приоритетов производительности приложения над точностью ведения журнала.

0 голосов
/ 18 марта 2013

Если вы используете .NET Framework 4, вы можете использовать BlockingCollection для сохранения последовательности журнала

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