【问题标题】:elmah: exceptions without HttpContext?elmah:没有 HttpContext 的异常?
【发布时间】:2011-01-07 16:21:08
【问题描述】:

我在 Application_Start 上生成了一个线程并希望记录异常。没有Context/HttpContext/HttpContext.Current,我怎样才能让它登录?

目前,它没有在我的线程中捕获任何异常,如果我写ErrorSignal.FromCurrentContext().Raise(ex);,我会收到关于上下文不能为空的错误。

也许我可以创建一个虚拟的 HttpContext,但不知何故我认为这不会很好。

-edit- 我尝试了ErrorSignal.Get(new HttpApplication()).Raise(ex);,但似乎没有发现该异常。

【问题讨论】:

    标签: c# asp.net exception elmah httpcontext


    【解决方案1】:

    确保在 web.config 中设置应用程序名称

    <errorLog type="Elmah.SqlErrorLog, Elmah" 
              connectionStringName="nibWeb" 
              applicationName="Nib.Services" />
    

    然后

    ErrorLog.GetDefault(null).Log(new Error(error));
    

    会起作用

    【讨论】:

    • 不管怎样,如果您使用 Elmah 的内存日志记录,则无需更改配置,只需调用 ErrorLog.GetDefault(null).Log(new Error(error ));
    • 警告:这种方法似乎不会引发真正的 Elmah 错误事件——例如,您不会收到错误电子邮件(如果您已配置)。您需要为此调用 .Raise() 。不幸的是,你需要有一个 .Raise() 的 HttpContext,所以我知道在这种情况下这样做的唯一方法是存储一个 HttpContext 并在以后使用它。
    【解决方案2】:

    我没有像 Brendan Carey 的回答那样使用 &lt;errorLog&gt;,因为我只是在内存中进行日志记录。尽管如此,他的命令在我的情况下效果很好,没有命名应用程序:

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

    由于需要 System.Web.Abstractions 3.5.0.0 的错误,我不得不用 .NET 4.0 重新编译 Elmah。如果有人想要的话,我的为 .NET 4.0 编译的分支就在这里(也是强命名):

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

    【讨论】:

    • 注意:一旦我切换到使用 sql 日志记录,我确实需要 ApplicationName。
    【解决方案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】:

      我向Using ELMAH in a console application 添加了一个解决方案,除了日志记录之外,它还增加了发送电子邮件、推文和过滤器的功能。

      【讨论】:

        猜你喜欢
        • 2011-03-01
        • 2011-06-04
        • 1970-01-01
        • 2011-02-22
        • 2017-06-15
        • 1970-01-01
        • 2011-12-05
        • 2018-10-14
        相关资源
        最近更新 更多