在ASP.NET中捕获CustomErrors

时间:2010-09-29 10:48:04

标签: c# asp.net custom-errors

我在web.config中有以下条目:

<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx" />

Error.aspx.cs中是否有办法获取错误详细信息,以便保存到文件中?

3 个答案:

答案 0 :(得分:3)

您可以使用Server.GetLastError()来获取最后引发的Exception对象:

Exception exception = Server.GetLastError();

或者,您可能希望在Application_Error方法的global.asax文件中处理此问题,而不是自定义错误页面。
Microsoft support article中介绍了一些用于自定义错误处理和报告的不同方法

答案 1 :(得分:1)

您可以配置日志记录框架以将其保存到文件中。任何框架都可以,但让我自己插入: - )

使用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回收。后者是其他日志框架支持开箱即用的功能。

答案 2 :(得分:1)

我建议使用ELMAH进行错误记录,如果这就是你要找的东西。它提供了应用程序中发生的任何未处理错误的所有详细信息,并将其记录到数据库/文本文件中。它还有一个功能强大的报告工具,可以显示有关已记录错误的所有信息,包括黄色死亡屏幕。它还为您提供了在发生错误时将错误邮寄给您的灵活性。最后,只需在web.config中添加一些配置即可使其运行。

但是,如果您还想要显示用户友好的屏幕,则需要在global.aspx的application_error中配置它。