Elmah: исключения без HttpContext?
Я создаю поток на Application_Start и хочу записывать исключения. Нет Context/HttpContext/HttpContext.Current
, так как я могу получить его для регистрации?
На данный момент это не вызывает каких-либо исключений в моих потоках, и если я пишу ErrorSignal.FromCurrentContext().Raise(ex);
, я получаю сообщение об ошибке, не может быть нулевым.
Возможно, я могу создать фиктивный HttpContext, но почему-то я не думаю, что это будет хорошо работать.
-edit - Я пробовал ErrorSignal.Get(new HttpApplication()).Raise(ex);
, и, похоже, это не исключение.
Ответы
Ответ 1
Убедитесь, что вы установили имя своего приложения в web.config
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="nibWeb"
applicationName="Nib.Services" />
а затем
ErrorLog.GetDefault(null).Log(new Error(error));
будет работать
Ответ 2
Я не использовал <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. Мое скомпилированное forfor.NET.NET fork здесь, если кто-то хочет его (также сильное именование):
http://code.google.com/r/scottstafford-elmah/
Ответ 3
Для моего приложения я сохранил 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);
}
}
Ответ 4
Я добавил решение для: Использование ELMAH в консольном приложении, которое добавляет возможность отправлять электронную почту, твиты и фильтр в дополнение к протоколированию.