elmah:没有HttpContext的exception?

我在Application_Start上产生一个线程,并想loggingexception。 没有Context/HttpContext/HttpContext.Current ,所以我怎么能得到它的日志?

目前,它并没有捕捉到我的线程中的任何exception,如果我写ErrorSignal.FromCurrentContext().Raise(ex); 我得到关于上下文的错误不能为null。

也许我可以创build一个虚拟的HttpContext,但不知怎的,我不认为这将工作正常。

-edit-我试过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)); 

将工作

我没有像Brendan Carey的回答那样使用<errorLog> ,因为我只是在内存中进行日志logging。 尽pipe如此,他的命令在我的情况下工作很好,没有命名应用程序:

 Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something."))); 

我必须用.NET 4.0重新编译Elmah,因为需要System.Web.Abstractions 3.5.0.0的错误。 我编译的.NET 4.0叉在这里,如果有人想要它(也强大的命名):

http://code.google.com/r/scottstafford-elmah/

对于我的应用程序,我在Application_Start保存了this.Context.ApplicationInstance ,以便可以使用保存的实例调用Elmah.ErrorSignal.Get 。 随着ErrorSignal ,我可以然后Raise 。 这通过所有的电子邮件filter。

下面是代码。 我使用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); } } 

我添加了一个解决scheme: 在控制台应用程序中使用ELMAH ,除了logging之外,还增加了发送电子邮件,推文和filter的function。