开发者

Elmah log error in Asp.Net MVC Application_Start [duplicate]

This question already has answers here: Closed 10 years ago.

Possible Duplicate:

elmah: exceptions without HttpContext?

In Global.asax

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        Regis开发者_如何学GoterRoutes(RouteTable.Routes);
        throw new Exception("TEST");
    }


    // ... other usual methods
}

Elmah is not logging the exception.

I do quite a bit of initialisation and configuration work in here and it's kinda important that I get error logs if anything goes wrong.

Not sure why it doesn't work but presumably to do with the MVC lifecycle - perhaps there is no HttpContext at this stage? Is there any way to log errors through Elmah here?


You're definitely right about one thing, HttpContext.Current does not exist in Application_Start, which is probably one of the problems of why Elmah doesn't log errors from that method.

But, if you have an exception in Application_Start, you have bigger problems than Elmah not logging the exception. You're Application_Start method should be flawless, or if it's not, it needs to be written so that it fails in your dev environment so you can see the problem before you push it to production. If it's an intermittent exception, I would suggest putting the problem code elsewhere.

UPDATE

Based on your comment, maybe this would work for you. It also has the additional benefit of checking on every request to see if it failed the first time.

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);
      }
    }
  }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜