База данных обработчика ошибок SQL ELMAH недоступна. Что происходит с журналированием?

StackOverflow https://stackoverflow.com/questions/758092

  •  09-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Кажется, что Эльма не может поймать свои собственные ошибки

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

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

Файл AXD недоступен, когда сбой журнала Databse SQL.

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

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

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

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

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

Вы всегда можете использовать опцию XML-файла для регистрации ошибок.

Мне кажется, вы немного путаете контексты.

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

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

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top