Я следующую запись в web.config:Ловля CustomErrors в ASP.NET
<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx" />
Есть ли способ в Error.aspx.cs, чтобы получить подробную информацию об ошибке, так что я могу сохранить в файл?
Я следующую запись в web.config:Ловля CustomErrors в ASP.NET
<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx" />
Есть ли способ в Error.aspx.cs, чтобы получить подробную информацию об ошибке, так что я могу сохранить в файл?
Вы можете использовать Server.GetLastError(), чтобы получить последний объект Exception, который был поднят:
Exception exception = Server.GetLastError();
В качестве альтернативы вы можете посмотреть на обработку этого в файле global.asax в методе Application_Error, а не вашу страницу ошибок.
Существует несколько различных способов, описанных в этом документе 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
в папку бин вашего приложения и включить эту конфигурацию, и вы хорошо идти.
Хорошая вещь о CuttingEdge.Logging AspNetExceptionLoggingModule
заключается в том, что он будет не только ломать исключения, возникающие во время запроса, но также будет ломать неудачи, возникающие из фоновых потоков и вызывать повторную загрузку AppDomain. Последний - это функция, отличная от других поддерживающих фреймворков.
Предлагаю использовать ELMAH для регистрации ошибок, если это то, что вы ищете. Он предоставляет всю информацию о любой необработанной ошибке, которая произошла в вашем приложении, и записывает ее в базу данных/текстовый файл. Он также имеет мощный инструмент отчетности, который показывает вам все о зарегистрированных ошибках, включая желтый экран смерти. Он также предоставляет вам гибкость в отправке вам сообщений об ошибках, когда они происходят. Наконец, это так же просто, как добавить несколько конфигураций в ваш web.config, чтобы запустить его.
Однако, если вам также интересно показывать удобный экран, вам необходимо настроить его в application_error в global.aspx.