6

我在 Azure 网站上使用 Elmah.MVC 2 和 MVC3、ASP.NET 4.5。

我已将其设置为通过 web.config 记录到 Web 服务器上的 XML 文件。这一切都有效。但是我想暂时停止它,因为我认为它可能会减慢 Web 服务器的速度,因为它会占用时间来编写这些错误文件。我计划登录到 SQL Server。但现在我需要阻止 Elmah。

我的 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>

<add key="elmah.mvc.disableHandler" value="true" />
<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="Admin" />
<add key="elmah.mvc.allowedUsers" value="Admin" />
<add key="elmah.mvc.route" value="elmah" />

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

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
  <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>
    <security allowRemoteAccess="yes" />
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="myDatabaseCS" />
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
    </elmah>
</configuration>

我以为这条线停止了它:

    <add key="elmah.mvc.disableHandler" value="true" />

但可惜不是。但是我无法进入 Elmah 页面,即 /Elmah 只是将我返回到登录页面。

如何停止 Elmah 伐木?

谢谢。

编辑1:

在 Global.asa 中可能与此有关:

//filters.Add(new ElmahHandledErrorLoggerFilter());
filters.Add(new HandleErrorAttribute());

第一行被注释掉,因为我认为 V2 不需要它。我相信所有错误处理现在都与 Elmah 合并了。

4

2 回答 2

13

只需从您的部分中删除<errorLog>元素。<elmah>或者注释掉。这将禁用日志记录功能,当您想要恢复功能时,您只需重新添加这些<errorLog>元素即可。这样,您不必删除任何核心 Elmah 组件,这些组件可能会在您以后想要恢复功能时导致问题,尤其是在您遗漏某些内容时。

于 2014-08-19T22:29:58.413 回答
4

请注意 -<errorLog><elmah>web.config 中删除不会停止日志记录,它只是将其恢复为内存中的日志记录,如此 SO answer中所述。(由于代表不足,无法对接受的答案发表评论。)

如果打算完全停止记录,您可以使用 Elmah ErrorFilterModule(假设它已添加到 web.config),就像这样(global.asax.cs 摘录):

protected void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)
{
    e.Dismiss();
}
于 2016-08-09T17:04:35.440 回答