Эльма:исключения без HttpContext?
-
22-09-2019 - |
Вопрос
Я создаю поток в 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 вилка находится здесь, если кому-то она нужна (также строгое имя):
Для своего приложения я сохранил 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 в консольном приложении это добавляет возможность отправлять электронную почту, твиты и фильтровать в дополнение к ведению журнала.