Elmah基本设置问题/问题

时间:2009-06-06 18:15:58

标签: asp.net-mvc elmah

我发现这很容易设置;要么设置配置中缺少一步,它没有正常工作,或者我实际上并不理解它的用途。这里肯定有一些错误。问题显然必须是我。我只是没有让这个工作。这就是我所做的。

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

        <%throw new Exception(“blah”); %GT;         把内容放在这里。     

点击页面获取黄色屏幕,但例外情况。

将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错误表明它“无法解析符号'。”'当我在Reflector中查看elmah.dll时显示此信息在两个公共构造函数中的任何一个中要求“字符串”或“IDicationary”的对象。

我正在使用VS 2008运行Windows Vista x64。将App_Data的权限设置为Everyone作为Co_Owner。

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

我用customerex替换了并创建了相关的页面:

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

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

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

那我在哪里搞砸了?

〜 - =麦克= - 〜

4 个答案:

答案 0 :(得分:20)

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

希望这有帮助

答案 1 :(得分:11)

尝试删除此部分:

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

这意味着Elmah设置为仅使用默认的内存中日志记录。这有助于解决问题,因为您知道它不是文件许可的事情。因此,一旦您使用内存中的日志记录,就可以将其设置为登录到xml文件。

您可能还想查看这个由Atif Aziz自己回答的stackoverflow问题How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

HTHS, 查尔斯

答案 2 :(得分:1)

我是从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。

答案 3 :(得分:0)

问题在于这一行

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

将其替换为

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