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 находится здесь, если кто-то хочет этого (также строгое именование):
Для моего приложения я сохранил 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 в консольном приложении, которое добавляет возможность отправки электронной почты, твитов и фильтров в дополнение к регистрации.