Необходимо определить, регистрирует ли ELMAH необработанное исключение или вызвало ErrorSignal.Raise () - PullRequest
2 голосов
/ 25 мая 2010

Я использую событие Elmah Logged в моем файле Global.asax для передачи пользователей в форму обратной связи при возникновении необработанного исключения.

Иногда я регистрирую другие обработанные исключения. Например:

ErrorSignal.FromCurrentContext().Raise(new System.ApplicationException("Program code not found: " + Student.MostRecentApplication.ProgramCode));

// more code that should execute after logging this exception

Проблема, с которой я столкнулся, заключается в том, что событие Logged вызывается как для необработанного, так и для обработанного, повышенного исключения. Есть ли способ определить в обработчике событий Logged, было ли исключение вызвано классом ErrorSignal или оно было просто необработанным? Могу ли я воспользоваться другими событиями Эльмы?

1 Ответ

2 голосов
/ 25 мая 2010

Надоело пытаться найти «правильный» способ сделать это, поэтому я в итоге создал свой собственный тип исключения:

public class HandledElmahException : Exception
{
    public HandledElmahException() : base() { }
    public HandledElmahException(string message) : base(message) { }
    public HandledElmahException(string message, Exception innerException) : base(message, innerException) { }
}

Затем в обработчике событий ErrorLog.Logged я просто проверяю, имеет ли исключение тип HandledElmahException.

void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)
{
    if (args.Entry.Error.Exception is HandledElmahException)
        return;

    // my code to transfer to custom error page to collect feedback...

}

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

ErrorSignal.FromCurrentContext().Raise(new HandledElmahException("Program code not found: " + Student.MostRecentApplication.ProgramCode));
...