База данных ELMAH SQL Error Handler недоступна - что происходит с журналированием? - PullRequest
12 голосов
/ 17 апреля 2009

Я тестирую ELMAH и намеренно отключил соединение с базой данных для журнала ELMAH в моем приложении, чтобы посмотреть, что произойдет в рабочей среде, если БД недоступна.

Кажется, что ELMAH не может перехватить свои собственные ошибки - файл AXD недоступен при сбое журнала базы данных SQL.

Каково поведение ELMAH, если база данных недоступна?

Как я могу диагностировать свои ошибки, если это происходит?

Ответы [ 4 ]

12 голосов
/ 17 июня 2009

Кажется, что ELMAH не может заманить в ловушку ошибки

ELMAH до некоторой степени ловит собственные ошибки. Если ErrorLogModule обнаруживает исключение при попытке записать ошибку, то исключение, возникающее при ведении журнала, отправляется в стандартное средство трассировки .NET Framework. См. строка 123 из источников 1.0. См. Также следующий обзор документации ASP.NET для получения стандартной трассировки .NET Framework, работающей с трассировкой ASP.NET:

Пошаговое руководство. Интеграция трассировки ASP.NET с трассировкой System.Diagnostics

файл AXD недоступен, когда Сбой журнала базы данных SQL.

Это правильно. Подключение к базе данных SQL Server должно быть функциональным для просмотра ошибок, хранящихся в базе данных SQL Server при использовании SqlErrorLog.

Что такое предполагаемое поведение ELMAH если база данных недоступна?

Если, например, база данных SQL Server не работает, во время ведения журнала произойдет SqlException. Затем ELMAH отправит содержимое объекта SqlException в стандартное средство трассировки .NET Framework.

Как я могу диагностировать свои ошибки, если это происходит?

Наилучшим вариантом здесь также является ведение журнала и сообщений об ошибках по электронной почте. Если база данных не работает, велика вероятность того, что почтовый шлюз работает, и вы все равно будете получать уведомления об ошибках. В результате ошибки в некоторых почтовых ящиках регистрируются . Это также имеет дополнительное преимущество, заключающееся в том, что если почтовый шлюз когда-либо не работает, есть вероятность, что база данных будет работать, и ошибки будут регистрироваться там. Однако, если оба не работают, вам нужно будет серьезно пересмотреть производственную инфраструктуру и, возможно, принять меры для мониторинга работоспособности вашей системы с помощью дополнительных мер.

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

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

Как указано выше, вы можете / должны использовать альтернативные приемники - электронную почту или обычный файл.

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

Я думаю, вы немного смешиваете контексты.

ELMAH, если база данных недоступна, не регистрирует ошибки в базе данных. Если на сервере выдается исключение или вы вызываете исключение через ErrorSignal, ELMAH пропустит это исключение либо на желтый экран, либо на страницу пользовательских ошибок (ваши настройки).

Поскольку страница Errors.axd доступна только тем, кто должен ее видеть (в идеале), можно представить эту ошибку пользователю.

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

<ч /> Я бы также выступил против использования ведения журнала XML для вашего основного источника ведения журнала. SQL-сервер даст вам лучшую производительность без необходимости управлять файлами. С ведением журнала XML это не так.

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

Вы всегда можете использовать опцию xml file для регистрации ваших ошибок.

...