Наследовать Исключительный класс, чтобы регистрировать все последующие вхождения исключения - PullRequest
2 голосов
/ 19 ноября 2009

Если я хочу пока регистрировать все случаи исключений в моем приложении,

я должен унаследовать класс Exception и выбросить все исключения этого класса,

, чей конструктор запишет подробности ошибки ..

или любая идея или предложение ???

Ответы [ 3 ]

6 голосов
/ 19 ноября 2009

В зависимости от типа приложения (ASP.NET/Console и т. Д.) Существуют разные подходы.

Для приложений Windows Forms это путь: -

namespace YourNamespace
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            HandleException(e.Exception);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            HandleException((Exception)e.ExceptionObject);
        }

        static void HandleException(Exception e)
        {
            //Handle the Exception here
        }

    }
}

В ASP.NET вы можете перехватить все необработанные исключения, используя событие Application_OnError в Global.asax или подключившись к событию Application.OnError со своим собственным HttpModule.

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

ELMAH поддерживает приложения ASP.NET

http://code.google.com/p/elmah/

Exceptioneer (мы создаем это - просто отмечая мой интерес к этой области) поддерживает ASP.NET, консольные приложения, приложения Windows Forms, приложения WPF и т. Д.

http://exceptioneer.com/

1 голос
/ 19 октября 2010

Я работаю в CodeSmith Tools и настоятельно рекомендую взглянуть на CodeSmith Insight . Мы используем его в нашем коммерческом приложении, и это была мечта. Мы раньше использовали Fogbugz и оценивали множество других продуктов. Он позволяет вам сериализовать целые объекты, а также отправляет много дополнительной информации, которая помогает в исправлении ошибок (трассировка, журналы, теги, снимки экрана, комментарии пользователей и многое другое). Это сокращает время решения проблемы, поскольку у вас есть тонна информации, а также возможность запросить дополнительную информацию у пользователя, который обнаружил ошибку.

0 голосов
/ 19 ноября 2009

Ведение журнала исключения в конструкторе исключения - не очень хорошая идея.

Какой тип приложения вы используете: Интернет или Windows?

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

Обычно вы используете блок try / catch для обработки исключений. Вы можете зарегистрировать исключение в блоке Catch.

try
{

//your code

}

Catch(Exception ex)

{

 Log(ex);

}

Вы можете использовать блок приложения Microsoft Logging (или любой другой API регистрации) для регистрации вашего исключения.

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