Каков наилучший способ регистрировать исключения в Visual Basic в приложении ASP.NET? - PullRequest
2 голосов
/ 06 апреля 2009

Я работаю над веб-приложением ASP.NET, написанным с использованием Visual Basic, и пытаюсь отследить полученное сообщение об ошибке.

Я бы хотел, чтобы он регистрировал исключение в файле (или в журнале событий), чтобы я мог его увидеть, так как ошибка возникает только на рабочем сервере, а не в среде разработки (поэтому VS isn ' установлен там ...).

Есть ли у кого-нибудь мысли о том, как лучше всего это сделать?

Приветствия

Ответы [ 7 ]

4 голосов
/ 06 апреля 2009

Не уверен, что это «лучшая практика», но наиболее распространенным способом является использование log4net .

2 голосов
/ 06 апреля 2009

Использовать log4net или Ведение журнала корпоративной библиотеки . Я также добавил бы модуль http, который регистрирует все необработанные ошибки (отфильтровать ошибки 404).

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

В моем случае, когда я регистрирую любые ошибки, я добавляю элемент для сбора данных об исключении. Мой глобальный обработчик ошибок затем проверяет все объекты исключений, проверяя, что мы не зарегистрировали ни одного из них.

1 голос
/ 20 апреля 2010

Удивлен, никто не упомянул Эльма пока

Elmah специально создан для ведения журнала ошибок с ASP.NET, и одна из замечательных особенностей его заключается в том, что вы можете добавить его в приложение ASP.NET, просто поместив DLL в корзину. и внесение некоторых изменений в файл web.config. Никаких изменений кода не требуется.

1 голос
/ 07 апреля 2009

Если вы используете ASP.NET 2.0 или выше, лучше всего ничего не делать. По умолчанию мониторинг работоспособности ASP.NET регистрирует исключения в журнале событий приложений. Просто используйте eventvwr.exe и ищите предупреждения от «ASP.NET». Информация, которую это регистрирует, очень полна.

Когда я говорю "ничего не делать", я имею в виду, что не нужно перехватывать исключения, если вы собираетесь их регистрировать Вы можете установить пользовательскую страницу ошибки, если хотите, но убедитесь, что исключения не перехвачены на верхнем уровне.

0 голосов
/ 06 апреля 2009

Наиболее часто используемые библиотеки для ведения журнала - это блок ведения журнала корпоративной библиотеки или log4Net: Статья журнала блога -Enterprise: http://www.codeproject.com/KB/architecture/GetLoggingWithEntLib.aspx -Log4Net: http://www.ondotnet.com/pub/a/dotnet/2003/06/16/log4net.html

Приветствия

0 голосов
/ 06 апреля 2009

Если вы можете заполучить global.asax для сайта - тогда в разделе 'Application_Error' в Global.asax сделайте что-то вроде этого

Dim ex As New Exception () ex = Server.GetLastError (). GetBaseException () Dim g As Новые общие функции ASendEmailFunction (ex.Message.ToString () & ex.Source.ToString () & ex.StackTrace.ToString ())

Это получит каждую ошибку приложения и отправит вам все детали - вам нужно создать ту ASendEmailFunction (), которая просто отправляет вам электронное письмо с содержанием

(Вы могли бы сделать это намного лучше, чем это, но я вписываю это прямо в это поле)

0 голосов
/ 06 апреля 2009

Беспорядок: когда он появится, поймайте его (предполагая, что сможете?) И отправьте столько данных на страницу, сколько сможете. Поместите его в комментарий HTML, чтобы пользователь не мог его увидеть. Что-то вроде:

lblError.Text = (положить отформатированный Информация об исключении здесь);

<! - <asp: label id = lblError /> ->

Почти так же грязно: ищите что-то вроде Trace.WriteLine. Вы можете включить трассировку в ASP.NET, которая позволяет вам перейти на определенную страницу (_trace.axd?) И получить дамп всех сообщений для загрузки этой страницы. Я на самом деле не использовал его, но он работает.

Немного менее грязно (так как это кажется временным явлением): используйте Trace.WriteLine для вывода материала и запустите debugview (из Microsoft) на сервере, если у вас есть физический доступ. Затем вы можете захватить этот отладочный вывод (ядро Win32 API на этом является OutputDebugString - я думаю, что .net вызов Debug.WriteLine)

Хорошее качество: Log4Net. Настройте его так, чтобы вы могли использовать его где угодно. В большинстве случаев включайте его в «ОШИБКУ», но в этом случае используйте «ОТЛАДКУ», пока не найдете решение.

Я бы пошел на 3, затем на 4 или на 3 сейчас, и на 4, когда вы в следующий раз немного очистите кодовую базу.

:)

...