2010-09-29 2 views
2

Я следующую запись в web.config:Ловля CustomErrors в ASP.NET

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

Есть ли способ в Error.aspx.cs, чтобы получить подробную информацию об ошибке, так что я могу сохранить в файл?

ответ

3

Вы можете использовать Server.GetLastError(), чтобы получить последний объект Exception, который был поднят:

Exception exception = Server.GetLastError(); 

В качестве альтернативы вы можете посмотреть на обработку этого в файле global.asax в методе Application_Error, а не вашу страницу ошибок.
Существует несколько различных способов, описанных в этом документе Microsoft support article для обработки и обработки пользовательских ошибок

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 в папку бин вашего приложения и включить эту конфигурацию, и вы хорошо идти.

Хорошая вещь о CuttingEdge.Logging AspNetExceptionLoggingModule заключается в том, что он будет не только ломать исключения, возникающие во время запроса, но также будет ломать неудачи, возникающие из фоновых потоков и вызывать повторную загрузку AppDomain. Последний - это функция, отличная от других поддерживающих фреймворков.

1

Предлагаю использовать ELMAH для регистрации ошибок, если это то, что вы ищете. Он предоставляет всю информацию о любой необработанной ошибке, которая произошла в вашем приложении, и записывает ее в базу данных/текстовый файл. Он также имеет мощный инструмент отчетности, который показывает вам все о зарегистрированных ошибках, включая желтый экран смерти. Он также предоставляет вам гибкость в отправке вам сообщений об ошибках, когда они происходят. Наконец, это так же просто, как добавить несколько конфигураций в ваш web.config, чтобы запустить его.

Однако, если вам также интересно показывать удобный экран, вам необходимо настроить его в application_error в global.aspx.

Смежные вопросы