2

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

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

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

4

3 回答 3

3

You can use Server.GetLastError() to get the last Exception object that was raised:

Exception exception = Server.GetLastError();

Alternatively you may want to look at handling this in the global.asax file in the Application_Error method rather than your custom error page.
There a few different methods described in this Microsoft support article for custom error handling and reporting

于 2010-09-29T10:49:48.560 回答
1

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

但是,如果您还对显示用户友好的屏幕感兴趣,则需要在 global.aspx 的 application_error 中进行配置。

于 2010-09-29T11:49:10.803 回答
1

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

使用CutEdge.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 文件夹并包含此配置,然后就可以开始使用了。

CutEdge.Logging 的好处AspNetExceptionLoggingModule在于它不仅会记录请求期间引发的异常,还会记录来自后台线程并导致 AppDomain 回收的故障。后者是其他日志框架不支持开箱即用的功能。

于 2010-09-29T11:03:32.483 回答