0

我正在开发一个使用 MVC 3、elmah 和 nhibernate 的旧网站。Elmah 日志实际上有数以千计的“未找到视图‘错误’或其主人”错误。我认为它掩盖了真正的错误。我无法弄清楚如何让 Elmah 记录真正的错误。

作为尝试调试的一种方式,我添加了 - return RedirectToAction("noWhere"); - 强制出错。在本地,我得到一个 .net 屏幕,它只是说“处理您的请求时发生异常......”在登台时我得到 YOSOD 屏幕,告诉我设置 web.config customerrors 节点。两者都将 customerrors 设置为 on。

网络配置具有以下内容:

 <pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.WebPages" />
  </namespaces>
</pages>
<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>


  <customErrors mode="On" defaultRedirect="~/Views/Shared/PageNotFound">
      <error statusCode="404" redirect="~/Views/Shared/PageNotFound" />
      <error statusCode="500" redirect="~/Views/Shared/PageNotFound" />
  </customErrors>

Global.asax 有:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
         filters.Add(new ElmahHandleErrorAttribute());
    }

Elmah 类有

public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{
    public override void OnException(ExceptionContext context)         
    {             
        base.OnException(context);               
        var e = context.Exception;             
        if (!context.ExceptionHandled // if unhandled, will be logged anyhow      
            || RaiseErrorSignal(e)    // prefer signaling, if possible 
            || IsFiltered(context))   // filtered?
            return;               
        LogException(e);         
    }  

并且 baseController 类具有:

protected ViewResult PageNotFound()
    {
        Response.StatusCode = (int)HttpStatusCode.NotFound;

        return View("PageNotFound", PageViewModelBuilder.UpdateSiteProperties(new PageViewModel()));
    }

    protected ViewResult PageBadRequest()
    {
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        return View("PageNotFound", PageViewModelBuilder.UpdateSiteProperties(new PageViewModel()));
    }

任何有关获取正确错误记录的帮助将不胜感激....

4

1 回答 1

1
于 2013-04-01T20:58:23.323 回答