Глобальная обработка исключений в веб-формах asp.net - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть существующий проект, он находится в веб-формах asp.net

в этом проекте каждое событие (page_load, button_click, dropdown_selectionIndexChanged и т. Д. .....) вызывается между блоком try catch, как показано ниже

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        checkLogin();
        //some logic
    }
    catch (Exception ex)
    {
        ShowMessage(ex.Message + "<br />" + ex.StackTrace, 1);
    }
}

в существующем проекте мы просто показываем пользователям сообщение об исключении.

Теперь я хочу записать все сообщения об исключениях в файл журнала (я могу записывать файлы журнала)

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

поэтому есть ли возможность глобально написать сообщение журнала для всех событий try catch на всех страницах.

это было бы более полезно для меня

Спасибо

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете захватывать незапланированные (и потоковые) исключения, используя свойства Application.ThreadException и AppDomain.CurrentDomain.UnhandledException. Ваш основной метод будет выглядеть следующим образом:

[STAThread]
static void Main() { 

    if (Debugger.IsAttached) {
        Run();
        return;
    } 

    Application.ThreadException += ApplicationThreadException;
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
    Run();
}

Обратите внимание на проверку отладчика, чтобы отладчик мог перехватывать эти исключения. Функция Run довольно проста

static void Run() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
}

А затем два обработчика исключений. Вообще это не плохая идея сделать что-то значимое во время этих событий - записать исключения (или отправить их администратору) и показать сообщение пользователям.

https://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

static void ApplicationThreadException(object sender, ThreadExceptionEventArgs e) {
    ErrorInformationDialog eid = new ErrorInformationDialog(e.Exception.Message, e.Exception);
    eid.ShowDialog();
}

static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e) {
    ErrorInformationDialog eid = new ErrorInformationDialog(e.ExceptionObject as Exception);
    eid.ShowDialog();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...