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叉在这里,如果有人想要它(也强大的命名):
对于我的应用程序,我在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。