Перехват пользовательских ошибок в ASP.NET - PullRequest
2 голосов
/ 29 сентября 2010

У меня есть следующая запись в web.config:

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

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

Ответы [ 3 ]

3 голосов
/ 29 сентября 2010

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

Exception exception = Server.GetLastError();

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

1 голос
/ 29 сентября 2010

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

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

1 голос
/ 29 сентября 2010

Вы можете настроить каркас ведения журнала, чтобы сохранить его в файл.Подойдет любой фреймворк, но позвольте мне добавить свой собственный здесь: -)

С 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.Последний является функцией, не поддерживаемой другими структурами ведения журналов "из коробки".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...