В зависимости от типа приложения (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/