Elmah 基本设置问题/问题

Posted

技术标签:

【中文标题】Elmah 基本设置问题/问题【英文标题】:Elmah basic setup questions/issues 【发布时间】:2010-10-31 21:46:41 【问题描述】:

我不觉得这很容易设置;要么设置配置中缺少步骤,要么无法正常工作,要么我实际上不了解它的目的。这里肯定有问题。问题显然是我。我只是没有让这个工作。这就是我所做的。

创建一个全新的 mvc 应用程序。 将以下内容放在 About.aspx 页面上。

把内容放在这里。

点击页面得到黄屏异常。

将 elmah.dll 添加到 bin 目录。

在Web.config文件中添加configurationSections:

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

将以下内容添加到 httpHandlers 部分:

<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

添加到模块部分:

<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>

添加到处理程序部分:

<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" preCondition="integratedMode" type="Elmah.ErrorLogPageFactory, Elmah"/>

添加一个 elmah 部分:

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

这里令人好奇的是,该字符串的“.XmlFileErrorLog”部分显示为红色,显示为 ReSharper 错误,表明它“无法解析符号 '.ctor'”,当我查看 Reflector 中的 elmah.dll 时会显示这一点对象在两个公共构造函数中的任何一个中都需要“字符串”或“IDicationary”。

我正在运行带有 VS 2008 的 Windows Vista x64。将 App_Data 的权限设置为所有人作为 Co_Owner。

http://localhost:xxxx/elmah.axd 页面确实出现并且没有显示错误。当我再次点击“关于”页面时,我仍然看到黄色屏幕,并且 elmah.axd 仍然没有显示 app_data 文件夹错误。

我用自定义错误替换并创建了关联页面:

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm" />

自定义页面显示,但 elmah.axd 仍显示“无错误”。 App_data 还是空的!

作为启动此设置的来源,我使用了: code.google.com/p/elmah/wiki/MVC

那么我在哪里搞砸了?

~-=迈克=-~

【问题讨论】:

【参考方案1】:

检查configuration/system.web/httpModules(如果您在开发 Web 服务器上使用)和configuration/system.webServer/modules(由 IIS7 使用)中是否存在 ErrorLogModule。这是项目中 web.config 的片段,我目前正在处理:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <httpModules>
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
        </httpModules>
    </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="ErrorLog" />
            <remove name="ErrorMail" />
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
        </modules>
    </system.webServer>
</configuration>

希望对你有帮助

【讨论】:

做到了!谢谢! 部分中缺少它。 我在 IIS7 上使用了 IIS 6 配置(该应用程序之前在 IIS 6 上运行并带有 elmah 日志记录)并忘记了 system.webserver 模块不存在。我的错。【参考方案2】:

尝试删除此部分:

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

这意味着 Elmah 设置为仅使用默认的内存日志记录。这有助于排除故障,因为您知道这不是文件权限问题。因此,一旦您使用内存日志记录,您就可以将其设置为记录到 xml 文件。

您可能还想查看这个 *** 问题 How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?,该问题由 Atif Aziz 本人回答。

HTH, 查尔斯

【讨论】:

【参考方案3】:

我从 nuget elmahelmah on XML log 安装,虽然我可以访问 http://localhost/elmah.axd,但没有获得预期的功能,但没有错误捕获。

我向 APP_DATA 文件夹中的帐户 IIS_IUSERS 授予写入权限,它开始处理 HTTP 404 错误和 MVC 基础结构之外的错误。但它没有在 mvc 中记录异常。解决方案是从 nuget 安装 elmah.mvc 包并开始捕获所有异常。

如果你的配置没问题,那么只需从 nuget 安装 elmah.mvc 包,它应该也开始在 mvc 中存储日志,而不仅仅是 HTTP 404。

【讨论】:

【参考方案4】:

问题出在这一行

  <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">

替换为

<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

【讨论】:

以上是关于Elmah 基本设置问题/问题的主要内容,如果未能解决你的问题,请参考以下文章

Elmah nuget 包不更新 web.config

Elmah 和 ASP.NET MVC 3

Elmah.MVC 与 Elmah.contrib.Mvc

通过 Mandrill 使用 Elmah 发送错误电子邮件

asp.net mvc:是啥让 error.cshtml 运行(并且在此过程中不登录到 elmah)

Azure 角色配置管理