Какова лучшая стратегия обработки исключений в классах регистрации ошибок?

Я пишу набор классов для регистрации ошибок, которые будут записываться в файл, журнал событий и т. Д. Какую обработку исключений следует выполнять в этих классах? Например, скажем, у меня есть метод LogError, который вызывается из обработчиков исключений и записывает в файл. Что считается лучшим решением в случае возникновения ошибки? Очевидно, я должен сделать эти методы максимально безопасными, но проблемы могут возникнуть всегда.


person darasd    schedule 25.02.2009    source источник
comment
Я использую .Net, если это актуально, но я не уверен, что это действительно так.   -  person darasd    schedule 25.02.2009


Ответы (4)


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

Если запись в stderr не удалась, пора сдаться - либо игнорировать это, либо полностью завершить приложение.

person Douglas Leeder    schedule 25.02.2009

Почему бы вам не использовать существующий механизм ведения журнала, такой как log4j / log4net / log4php / log4 *? Эти инструменты, вероятно, разобрали эти детали.

В качестве побочного примечания, если вы запустите свой код внутри контейнера (например, tomcat), даже если вы создадите исключение внутри обработчика исключений, контейнер поймает его и покажет. Как сказал Дуглас Лидер, вы можете перехватить все исключения внутри обработчика и передать их в syserr.

person Miguel Ping    schedule 25.02.2009
comment
Да, но колесо log4net имеет гораздо больше наворотов, чем нам нужно. В свое время я написал несколько регистраторов ошибок, и они всегда просты и делают то, что от них требуется. Это не сложно. - person darasd; 25.02.2009

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

person Nir    schedule 25.02.2009

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

Затем служба аудита может быть реализована как конечный автомат, который может принимать и записывать сообщения на основе критериев, определенных в его конфигурации. Универсальный обработчик исключений также может использовать службу аудита для поддержки централизованного просмотра проблем, возникающих в корпоративной SOA, - для поддержки мониторинга на основе исключений. Любое условие, которое не должно возникать в решении, оснащено инструментами для отправки сообщения об исключении на обработчик исключений.

person Eric Rcoh    schedule 09.05.2012
comment
Это не совсем ответ на вопрос. Речь идет об обработке ошибок при обработке ошибок. - person Emond Erno; 20.10.2012