【发布时间】:2010-09-29 10:48:04
【问题描述】:
我在 web.config 中有以下条目:
<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx" />
Error.aspx.cs 中有没有办法获取错误详细信息,以便我可以保存到文件中?
【问题讨论】:
标签: c# asp.net custom-errors
我在 web.config 中有以下条目:
<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx" />
Error.aspx.cs 中有没有办法获取错误详细信息,以便我可以保存到文件中?
【问题讨论】:
标签: c# asp.net custom-errors
您可以使用 Server.GetLastError() 来获取最后一个引发的异常对象:
Exception exception = Server.GetLastError();
或者,您可能希望查看在 Application_Error 方法中的 global.asax 文件中处理此问题,而不是您的自定义错误页面。
Microsoft support article 中描述了几种不同的方法,用于自定义错误处理和报告
【讨论】:
您可以配置日志框架以将其保存到文件中。任何框架都可以,但让我在这里插入我自己的框架:-)
使用CuttingEdge.Logging,您可以配置一个HttpModule(随库提供),它将自动将异常信息转发到日志系统。当您配置XmlFileLoggingProvider 时,您将能够写入文件。您的应用程序无需更改。这是一个示例配置:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="logging"
type="CuttingEdge.Logging.LoggingSection, CuttingEdge.Logging" />
</configSections>
<logging defaultProvider="XmlLogger">
<providers>
<add name="XmlLogger"
type="CuttingEdge.Logging.XmlFileLoggingProvider, CuttingEdge.Logging"
path="log.xml"
/>
</providers>
</logging>
<system.web>
<httpModules>
<add name="ExceptionLogger"
type="CuttingEdge.Logging.Web.AspNetExceptionLoggingModule, CuttingEdge.Logging"/>
</httpModules>
</system.web>
</configuration>
您只需将 CuttingEdge.Logging.dll 添加到应用程序的 bin 文件夹并包含此配置即可。
CuttingEdge.Logging AspNetExceptionLoggingModule 的好处在于,它不仅会记录请求期间引发的异常,还会记录来自后台线程并导致 AppDomain 回收的故障。后者是其他日志框架不支持开箱即用的功能。
【讨论】:
如果这就是您要查找的内容,我建议使用 ELMAH 进行错误记录。它提供了您的应用程序中发生的任何未处理错误的所有详细信息,并将其记录到数据库/文本文件中。它还有一个强大的报告工具,可以向您显示有关已记录错误的所有信息,包括黄屏死机。它还为您提供了在错误发生时向您邮寄错误的灵活性。最后,只需在 web.config 中添加一些配置即可运行它。
但是,如果您也对显示用户友好的屏幕感兴趣,则需要在 global.aspx 的 application_error 中进行配置。
【讨论】: