Уведомление об исключениях в.NET
У меня есть программа WPF, которую я разрабатываю, в которой я хочу перехватывать исключения и отправлять уведомления центральному (стороннему) органу, возвращая контроль пользователю. Система, обычно встречающаяся в таких программах, как Firefox, Eclipse и т. Д.
Для остроумия:
Пользователь нажимает кнопку в моей программе WPF, которая не работает. Обнаружено исключение, и пользователю предоставляется диалоговое окно "Черт, мы что-то напортачили. Мы получили уведомление и исправим это как можно скорее. Тем временем вы можете быть осторожны с <some smart summary of events>
"
После этого управление возвращается в работоспособное состояние. На серверной стороне копия исключения (traceback и т. Д.) Отправляется либо по электронной почте, либо через какой-либо интерфейс pub/sub команде разработчиков.
По сути, я хочу что-то вроде Hoptoad или Exceptional (Rails).
- Такая библиотека уже существует?
- Если нет, то какие библиотеки электронной почты и / или публикации / публикации лучше всего использовать для его создания.
4 ответа
Возможно, вы захотите взглянуть на Enterprise Library (EntLib) - Блок приложения регистрации.
Он не регистрирует исключения в автоматическом режиме, но позволяет вам использовать (и создавать пользовательские) приемники, такие как журнал событий и базу данных, для хранения сообщений.
SmartGasse сборки Redgates имеет репортер исключений, который может сделать свое дело. Если не прокатится, то не слишком сложно.
// WPF might have another event, this one works for winforms
Application.ThreadException += OnUnhandledThreadException;
//console apps
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
// example method
static void OnUnhandledException(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception) args.ExceptionObject;
SmtpClient client = new SmtpClient("my.smtp.server");
var message = new MailMessage("support@mycompany.se", "mycoolapp@somewhere")
{
Subject = "App failed",
Body = e.ToString()
};
client.Send(message);
MessageBox.Show("Whoops. App failed. Sorry. Goodbye!");
}
Мы использовали регистрацию в EntLib в моей предыдущей команде, и это было очень полезно, всякий раз, когда создавалось исключение, оно регистрировалось в БД и отправляло нам электронное письмо.
В моей текущей команде мы используем простую функцию исключения электронной почты, где мы отображаем ошибку, и пользователь может отправить нам сообщение об ошибке (он также делает снимок экрана вместе с полным лог-файлом, а не с исключением, которое иногда полезно)