3

AppData除了错误之外,我无法让 ELMAH 将错误记录到我的文件夹中404。我不确定问题可能是什么。我猜这是因为我有<customErrors mode="RemoteOnly" defaultRedirect="~/Views/Shared/Error.cshtml">,但我尝试过这里记录的内容,但没有任何运气。这是我的 web.config(至少对使用 ELMAH 至关重要):

<sectionGroup name="elmah">
  <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
  <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
  <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
  <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>

<appSettings>
  <add key="elmah.mvc.disableHandler" value="false" />
  <add key="elmah.mvc.disableHandleErrorFilter" value="false" />
  <add key="elmah.mvc.requiresAuthentication" value="true" />
  <add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
  <add key="elmah.mvc.allowedRoles" value="Programmers" />
  <add key="elmah.mvc.allowedUsers" value="*" />
  <add key="elmah.mvc.route" value="elmah" />
</appSettings>

<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>

<modules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>

<elmah>
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data"/>
</elmah>

这是我的FilterConfig.cs

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new ElmahHandleErrorLoggerFilter());
        filters.Add(new HandleErrorAttribute());
    }
}

还有我的自定义 Elmah 处理程序:

public class ElmahHandleErrorLoggerFilter : System.Web.Mvc.IExceptionFilter
{

    public void OnException(ExceptionContext context)
    {
        //Log only handled exceptions, because all others will be caught by ELMAH
        if (context.ExceptionHandled)
        {
            ErrorSignal.FromCurrentContext().Raise(context.Exception);
        }
    }
}

关于我可能做错了什么或我错过了什么的任何想法?

4

1 回答 1

1

基本上,ELMAH 默认会记录所有未处理的异常,它也会记录所有请求。

您甚至不需要任何日志过滤器。

您只需要添加runAllManagedModulesForAllRequests="true"到 ELMAHmodules部分:

 <modules runAllManagedModulesForAllRequests="true">

这将允许 ELMAH 处理所有请求并记录所有错误。

于 2014-05-08T12:58:10.033 回答