我发现这很容易设置;要么设置配置中缺少一步,它没有正常工作,或者我实际上并不理解它的用途。这里肯定有一些错误。问题显然必须是我。我只是没有让这个工作。这就是我所做的。
创建一个全新的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
那我在哪里搞砸了?
〜 - =麦克= - 〜
答案 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 elmah
和elmah 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">