Используйте одиночный Elmah.axd для нескольких приложений с одним журналом БД
У нас есть один SQL-журнал для хранения ошибок из нескольких приложений. Мы отключили страницу elmah.axd для каждого из наших приложений и хотели бы иметь новое приложение, которое специально отображает ошибки из всех приложений, сообщающих об ошибках в общий журнал SQL.
На данный момент, хотя приложение для всех ошибок использует общий SQL-журнал, оно отображает только ошибки из текущего приложения. Кто-нибудь делал это раньше? Что в коде эльмы может потребоваться изменить?
Ответы
Ответ 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. Я не нашел, если он непознаваем - просто покажите еще один столбец.