2011-01-06 98 views
6

在我的MVC web项目。我正在尝试向访问者显示自定义错误页面,而不使用web.config中的“custromerrors”元素。Elmah没有记录异常

我能赶上的异常像下面

protected void Application_Error(object sender, EventArgs e) 
{ 

    Exception exception = Server.GetLastError(); 

    bool success = RaiseErrorSignal(exception); 

    Response.Clear(); 

    HttpException httpException = exception as HttpException; 

    RouteData routeData = new RouteData(); 
    routeData.Values.Add("controller", "Error"); 

    if (httpException == null) 
    { 
     routeData.Values.Add("action", "Index"); 
    } 
    else //It's an Http Exception, Let's handle it. 
    { 
     switch (httpException.GetHttpCode()) 
     { 
      case 404: 
       // Page not found. 
       routeData.Values.Add("action", "Error404"); 
       break; 
      case 500: 
       // Server error. 
       routeData.Values.Add("action", "Error500"); 
       break; 

      // Here you can handle Views to other error codes. 
      // I choose a General error template 
      default: 
       routeData.Values.Add("action", "Index"); 
       break; 
     } 
    } 

    // Pass exception details to the target error View. 
    routeData.Values.Add("error", exception); 

    // Clear the error on server. 
    Server.ClearError(); 

    // Call target Controller and pass the routeData. 
    IController errorController = new ProjectName.WebSite.Controllers.ErrorController(); 
    errorController.Execute(new RequestContext(
     new HttpContextWrapper(Context), routeData)); 


} 

private static bool RaiseErrorSignal(Exception e) 
{ 
    var context = HttpContext.Current; 
    if (context == null) 
     return false; 
    var signal = ErrorSignal.FromContext(context); 
    if (signal == null) 
     return false; 
    signal.Raise(e, context); 
    return true; 
} 

但是ELMAH着错误日志还我养了错误信号。

+2

那么,你的问题是什么?我看到的只是一个结论。 – 2011-01-06 14:56:51

+0

signal.Raise(e,context)不起作用,因为当我去/elmah.axd查看异常时,列表是空的。 – Yucel 2011-01-06 17:19:08

回答

9

我发现这个问题,我错过了一个web.config部分。我将“ErrorLog”模块添加到<system.webserver><modules>。我还需要将它添加到<system.web><httpModules>

添加后,Elmah开始记录错误。

另外我不需要调用ErrorSignal.Raise()方法,Elmah可以在没有信号的情况下检测错误。