Пользовательская обработка ошибок и лог - PullRequest
0 голосов
/ 26 апреля 2011

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

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

Вопрос в следующем: Есть ли какое-нибудь решение для переопределения события catch?

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

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

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

На самом деле, вы хотите что-то, что должно:

  • Обработка исключений.
  • Журнал исключений.

Существует концепция под названием «IL-ткачество», основанная на внедрении кода после компиляции, что облегчает аспектно-ориентированное программирование.

Это то, что вы можете сделать до и после выполнения методов и свойств, и, в конце концов, это «обработка любого исключения, сгенерированного в любом элементе сборки», не так ли?

Например, у меня есть некоторый опыт работы с PostSharp, который реализует IL-ткачество и позволяет невероятно легко с ним работать: он основан на атрибутах.

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

Обработка исключений может быть реализована как «HandleExceptionAttribute» и ведение журнала «LogAttribute» (это всего лишь пример!).

Узнайте больше о PostSharp (если я не ошибаюсь, у него есть бесплатная версия для сообщества):

И несколько практических рекомендаций:

0 голосов
/ 26 апреля 2011

Вы можете поймать определенные типы исключений

Try
{do something}
catch (SystemException ex) { }
catch (InvalidOperationException ex) { }
catch (Exception ex) { }

Это то, что вы имеете в виду?

В противном случае вы можете реализовать Класс обработчика исключений

...