Вопрос

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

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

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

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

Это было полезно?

Решение

Убедитесь, что вы указали имя своего приложения в 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.Моя скомпилированная для .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 в консольном приложении это добавляет возможность отправлять электронную почту, твиты и фильтровать в дополнение к ведению журнала.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top