Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 Asp.Net MVC应用程序启动时出现Elmah日志错误_Asp.net Mvc 3_Elmah_Httpcontext_Error Logging_Application Start - Fatal编程技术网

Asp.net mvc 3 Asp.Net MVC应用程序启动时出现Elmah日志错误

Asp.net mvc 3 Asp.Net MVC应用程序启动时出现Elmah日志错误,asp.net-mvc-3,elmah,httpcontext,error-logging,application-start,Asp.net Mvc 3,Elmah,Httpcontext,Error Logging,Application Start,可能重复: 在Global.asax中 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(Rou

可能重复:

Global.asax中

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        throw new Exception("TEST");
    }


    // ... other usual methods
}
Elmah
没有记录异常

我在这里做了相当多的初始化和配置工作,如果出现任何问题,获取错误日志非常重要


不确定为什么它不起作用,但可能与MVC生命周期有关-也许在这个阶段没有
HttpContext
?有没有办法通过
Elmah
在这里记录错误?

关于
HttpContext这一点,您肯定是对的。当前的
不存在于
应用程序\u Start
中,这可能是Elmah不记录该方法错误的原因之一

但是,如果您在Application_Start中出现异常,那么您将遇到比Elmah更大的问题—不记录异常。您的
Application\u Start
方法应该是完美的,或者如果不是,则需要编写它,以便在您的开发环境中失败,这样您可以在将其推向生产之前看到问题。如果是间歇性异常,我建议将问题代码放到其他地方

更新

根据你的评论,也许这对你有用。它还有一个额外的好处,就是检查每个请求,看它是否第一次失败

protected void Application_BeginRequest(object sender, EventArgs args)
{
  CheckConfiguration();
}

private static readonly object ConfigurationLockObject = new object();
private void CheckConfiguration()
{
  /** Lock Bypass **/
  if (IsConfigured()) 
  {
    return;
  }

  // The lock ensures the configuration only gets called one at a time.
  lock (ConfigurationLockObject)
  {
    // Must check for configuration again, just in case multiple threads had hit the lock
    if (!IsConfigured())
    {
      try
      {
        // Configuration Code
      }
      catch (Exception exception)
      {
        Log.Error("Exception Occurred", exception);
      }
    }
  }
}

Application_Start是初始化IOC容器的地方,需要从配置文件中读取。我同意这是一个不好的地方,有潜在的异常生成代码,但我想不出任何方法来解决它。这涵盖了与相同的领域,它有一个比这里更好的答案。