Создание Logger - PullRequest
       20

Создание Logger

1 голос
/ 18 ноября 2011

Это на самом деле не проблема кодирования, но я после некоторого отзыва сообщества о некоторых проблемах, которые возникают у меня, при разработке новой реализации Logger.

Фон

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

System

В настоящее время у нас разрабатывается система. Система имеет класс логгера, который является Singleton ( недостаток дизайна, я знаю ... ), и этот класс имеет коллекцию IReporter объектов.

Каждый раз, когда приложение вызывает Logger.Instance.Log (сообщение) , регистратор будет направлять эти сообщения каждому IReporter внутри очереди, а репортеры несут ответственность за регистрацию сообщения. в месте назначения / хранения / что угодно.

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

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

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

Я смотрю на людей, которые сталкивались с подобными ситуациями и как они подошли к этой проблеме.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Правильно ли я понял, и все эти процессы имеют доступ к одному и тому же набору файлов? В Windows?

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

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

0 голосов
/ 18 ноября 2011

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

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