Подтвердить что ты не робот

Используйте одиночный Elmah.axd для нескольких приложений с одним журналом БД

У нас есть один SQL-журнал для хранения ошибок из нескольких приложений. Мы отключили страницу elmah.axd для каждого из наших приложений и хотели бы иметь новое приложение, которое специально отображает ошибки из всех приложений, сообщающих об ошибках в общий журнал SQL.

На данный момент, хотя приложение для всех ошибок использует общий SQL-журнал, оно отображает только ошибки из текущего приложения. Кто-нибудь делал это раньше? Что в коде эльмы может потребоваться изменить?

4b9b3361

Ответ 1

Я предполагаю, что в "SQL Log" вы имеете в виду MSSQL Server... Если это так, возможно, самый простой способ выполнить то, что вы хотите, - это отредактировать хранимые процедуры, созданные в базе данных SQL Server, которые содержат ваши ошибки.

Чтобы получить список ошибок, DLL ELMAH вызывает ELMAH_GetErrorsXML proc с именем приложения в качестве параметра, затем proc фильтрует возврат с помощью WHERE [Application] = @Application.

Просто удалите предложение WHERE из proc ELMAH_GetErrorsXML, и все ошибки должны быть возвращены независимо от приложения.

Чтобы получить отдельную запись об ошибке, вам нужно будет сделать то же самое с proc ELMAH_GetErrorXML, так как она также фильтрует приложение.

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

CAVEAT: Я не пробовал это, поэтому я не могу гарантировать результаты...

Ответ 2

Не стоит переопределять обработчик Elmah по умолчанию factory, чтобы он фильтровал журналы Elmah приложениями. Я написал пример приложения, в котором показано, как это сделать с MySql: http://diagnettoolkit.codeplex.com/releases/view/103931. Вы можете также проверить сообщение в своем блоге, где я объясню, как это работает.

Ответ 3

Да, это легко работает. Однако вы не можете увидеть имя приложения в Elmah/Default.aspx. Я не нашел, если он непознаваем - просто покажите еще один столбец.