elmah: исключения без HttpContext?

Я создал поток на Application_Start и хотел бы регистрировать исключения. Здесь нет Context/HttpContext/HttpContext.Current Итак, как я могу получить это войти?

На данный момент, это не ловит никаких исключений в моих темах, и если я пишу ErrorSignal.FromCurrentContext().Raise(ex); Я получаю ошибку о контексте не может быть нулевым.

Может быть, я могу создать фиктивный HttpContext, но почему-то я не думаю, что это будет работать хорошо.

Я пытался ErrorSignal.Get(new HttpApplication()).Raise(ex); и это, похоже, не подхватывает это исключение.

4 ответа

Решение

Убедитесь, что вы указали имя своего приложения в web.config

<errorLog type="Elmah.SqlErrorLog, Elmah" 
          connectionStringName="nibWeb" 
          applicationName="Nib.Services" />

а потом

ErrorLog.GetDefault(null).Log(new Error(error));

буду работать

Я не использовал <errorLog> как в ответе Брендана Кэри, потому что я веду журнал только в памяти. Тем не менее, его команда отлично работала в моем случае, не называя приложение:

Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something.")));

Я ДОЛЖЕН перекомпилировать Elmah с.NET 4.0 из-за ошибки, связанной с необходимостью System.Web.Abstractions 3.5.0.0. Моя ветка compiled-for-.NET 4.0 находится здесь, если кто-то хочет этого (также строгое именование):

http://code.google.com/r/scottstafford-elmah/

Для моего приложения я сохранил this.Context.ApplicationInstance в Application_Start так что я могу позвонить Elmah.ErrorSignal.Get с сохраненным экземпляром. С ErrorSignalЯ мог тогда Raise, Это проходит через все почтовые фильтры.

Ниже приведен код. Я использую FluentScheduler для

public class Global : HttpApplication {
    void Application_Start(object sender, EventArgs e) {

        var application = Context.ApplicationInstance;
        FluentScheduler.TaskManager.UnobservedTaskException +=
            (FluentScheduler.Model.TaskExceptionInformation i, UnhandledExceptionEventArgs a) =>
                Elmah.ErrorSignal.Get(application).Raise(i.Task.Exception);

    }
}

Я добавил решение для: Использование ELMAH в консольном приложении, которое добавляет возможность отправки электронной почты, твитов и фильтров в дополнение к регистрации.

Другие вопросы по тегам