ELMAH是否记录了异常,即使它们没有冒泡到应用程序?我想在发生异常时弹出消息并仍然记录异常.目前我已经把所有东西都放在try catch块中并且吐出消息,但这变得乏味.
我花了很多时间试图找出一个解决方法,但无济于事,所以我想我会看到这里是否有人有想法.
我在我的ASP.NET MVC3应用程序中使用Elmah.我使用的是前一个链接中接受的答案中完全相同的代码.
我在Global.asax中也有这个代码,用于显示带有正确HTTP响应的错误页面:
/// <summary>
/// The customErrors functionality provided by ASP.NET results in HTTP 302 redirects occurring which doesn't accurately reflect what the real HTTP code of the response was.
/// This method can be used to handle specific HTTP codes without an intermediate redirect.
/// </summary>
protected void Application_Error() {
var exception = Server.GetLastError();
var httpException = exception as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Error500"; …Run Code Online (Sandbox Code Playgroud) 我正在建立一个MVC 3.0电子商务网站.我想避免在我的代码中粘贴try-catch块.
问题很简单 - 捕获网站上所有错误的好策略是什么?我想知道所有这些...所以我可以努力在网站上线后将该数量计算为0.我计划将每个错误写入记录器并发送给它.
我已经完成了关于在global.asax文件中捕获它的一些阅读...但我也读过它没有得到所有这些.
任何人有任何建议或能指出我的方向吗?
我发现这很容易设置; 要么设置配置中缺少一步,它没有正常工作,或者我实际上并不理解它的用途.这里肯定有一些错误.问题显然必须是我.我只是没有让这个工作.这就是我所做的.
创建一个全新的mvc应用程序.在About.aspx页面上放置以下内容.
<%throw new Exception("blah"); %>将内容放在此处.
点击页面获取黄色屏幕异常.
将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>
Run Code Online (Sandbox Code Playgroud)
将以下内容添加到httpHandlers部分:
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
Run Code Online (Sandbox Code Playgroud)
添加到模块部分:
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
Run Code Online (Sandbox Code Playgroud)
添加到处理程序部分:
<add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" preCondition="integratedMode" type="Elmah.ErrorLogPageFactory, Elmah"/>
Run Code Online (Sandbox Code Playgroud)
添加一个elmah部分:
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
</elmah>
Run Code Online (Sandbox Code Playgroud)
这里很奇怪的是,该字符串的".XmlFileErrorLog"部分显示为红色,因为ReSharper错误表明它"无法解析符号'.'''当我在Reflector中查看elmah.dll时显示此对象需要两个公共构造函数中的任何一个中的"字符串"或"IDicationary".
我正在使用VS 2008运行Windows Vista x64.将App_Data的权限设置为Everyone作为Co_Owner.
该HTTP://本地主机:XXXX/elmah.axd页面不上来,并显示没有错误.当我再次点击"关于"页面时,我仍然看到黄色屏幕,elmah.axd仍然显示app_data文件夹没有错误.
我替换了customerrors并创建了相关的页面:
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm" />
Run Code Online (Sandbox Code Playgroud)
自定义页面显示,但elmah.axd仍显示"无错误".App_data仍然是空的!
作为启动此设置的来源,我使用了:code.google.com/p/elmah/wiki/MVC …
我是ASP.NET MVC的新手,我正在寻找最简单的方法来设置全局错误处理,记录和报告(通过电子邮件).仅供参考,我的ASP.NET MVC应用程序作为Azure中的Web角色托管,但我试图避免使用任何特定于Azure的钩子.
看起来安装和配置ELMAH是一个很好的第一步.
当我看着NuGet时,我看到:
我想安装以下哪些软件包?
编辑:经过一些实验,我更困惑.在默认的MVC 4应用程序之上安装了三个选项之后,我比较了项目文件.似乎Elmah.Contrib.Mvc和Elmah.MVC都没有添加elmah.1.2.2包(我在安装基本ELMAH时得到).此外,两个包都不会将该<elmah>部分添加到Web.config.
那么......我是否需要首先安装ELMAH,然后安装一个"... MVC"软件包来获得他们可能得到的任何漂亮的改进?
我想处理应用程序范围错误并在asp.net mvc中显示ErrorView页面.有3种方法可以做到(或者我知道).
1) ErrorAttribute in BaseController:Controller class.
Can be used on individual Action/Controller/BaseController.
2) Override OnException() in the BaseController:Controller class.
Will work on Controllers derived from BaseController
3) Application_Error in Global_aspx.
Run Code Online (Sandbox Code Playgroud)
什么是最佳做法.这些方法中的哪一个应该用于应用程序范围的错误处理,或者我们应该使用多个还是仅使用一个.
如果我们在BaseController上处理ErrorAttribute或/和OnException()的错误,我们仍然应该在Application_Error()中处理它.
我们什么时候应该使用Application_Error()?
我正在构建一个具有ASP.NET MVC Web应用程序的多层应用程序.它包含表达层,业务层,数据层等常见内容.如何创建/使用体面的异常处理机制?我阅读了模式和实践,您需要将异常冒泡到各个层.
还记录.记录发生在哪里?在MVC Web应用程序中?
您将如何根据错误类型重定向到各种错误页面?
我会很感激有关这方面的一些反馈,以及一些文章,如果你们有一些.如果有任何样本应用程序使用一个体面的异常哈希和日志记录策略请告诉我:)
我使用自定义错误页面设置
<customErrors mode="On" defaultRedirect="~/Home/Error">
<error statusCode="404" redirect="~/Home/PageNotFound" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
我创建了一个抛出异常的页面,然后重定向到正确的错误页面.
但是我注意到生产网络服务器上的elmah中的这些错误:
System.InvalidOperationException未找到视图"错误"或其主文件或视图引擎不支持搜索的位置.搜索了以下位置:〜/ Areas/Football/Views/Draft/Error.aspx~/Areas/Football/Views/Draft/Error.ascx~/Areas/Football/Views/Shared/Error.aspx~/Areas/Football /Views/Shared/Error.ascx~/ Views/Draft/Error.aspx~/Views/Draft/Error.ascx~/Views/Shared/Error.aspx~/Views/Shared/Error.ascx~/Areas/Football /意见/ Draft/Error.cshtml~/Areas/Football/Views/Draft/Error.vbhtml~/Areas/Football/Views/Shared/Error.cshtml~/Areas/Football/Views/Shared/Error.vbhtml~/Views/Draft/Error.cshtml~/Views/Draft/Error.vbhtml~/Views/Shared/Error.cshtml~/Views/Shared/Error.vbhtml
为什么要在别处寻找错误页面?我删除了〜/ Views/Shared/Error.cshtml并在〜/ Home/Error中添加了我的自定义错误页面,因为我在配置文件中指定了一个新的默认值.
有任何想法吗?
谢谢.
当我禁用自定义错误时,Elmah会将所有发生的异常记录下来并将其记录到我的数据库中并通过电子邮件发送给我.
但是,第二个我将我的web.config更改为:
<customErrors mode="RemoteOnly" defaultRedirect="~/Home/Error">
</customErrors>
Run Code Online (Sandbox Code Playgroud)
Elmah停止运作.它不再记录数据库或其他任何异常,我看到的是我正在执行的自定义错误操作.
如何获得自定义错误消息并仍然具有elmah日志异常?除了Elmah,我目前没有做任何其他例外拦截.