Elmah: Exceções sem httpContext?
-
22-09-2019 - |
Pergunta
Eu gero um tópico no Application_start e gostaria de registrar exceções. Não há Context/HttpContext/HttpContext.Current
, então como posso fazer o log?
No momento, ele não capta nenhuma exceção em meus tópicos e se eu escrever ErrorSignal.FromCurrentContext().Raise(ex);
Recebo um erro sobre o contexto não pode ser nulo.
Talvez eu possa criar um HttpContext dummy, mas de alguma forma não acho que isso funcione bem.
-editar- eu tentei ErrorSignal.Get(new HttpApplication()).Raise(ex);
E parece não entender essa exceção.
Solução
Certifique -se de definir o nome do seu aplicativo em web.config
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="nibWeb"
applicationName="Nib.Services" />
e depois
ErrorLog.GetDefault(null).Log(new Error(error));
vai funcionar
Outras dicas
Eu não estava usando <errorLog>
Como na resposta de Brendan Carey, porque eu estava apenas na memória. No entanto, seu comando funcionou muito bem no meu caso sem nomear o aplicativo:
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something.")));
Eu tive que recompilar o Elmah com o .NET 4.0, devido a um erro sobre a necessidade de sistemas.web.abstrações 3.5.0.0. Meu garfo compilado para a.
Para minha aplicação, eu salvei this.Context.ApplicationInstance
dentro Application_Start
para que eu possa ligar Elmah.ErrorSignal.Get
com a instância salva. Com o ErrorSignal
, Eu poderia então Raise
. Isso passa por todos os filtros de email.
Abaixo está o código. Eu uso fluentscheduler para
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);
}
}
Eu adicionei uma solução para: Usando Elmah em um aplicativo de console Isso adiciona capacidade de enviar email, tweets e filtro, além do log.