Определите, включена ли Эльма?
Вопрос
Как я могу определить программно, будь то или нет Elmah включен?
Решение
Потому что:
Elmah можно динамически добавлять в запуск веб-приложения ASP.NET или даже всех веб-приложений ASP.NET на машине, без каких-либо потребностей в повторной компиляции или повторном развертывании.
Вам не нужно обнаруживать, присутствует ли он. Просто напишите свой код ведения журнала, как если бы он присутствовал, и если он не будет, ничто не будет зарегистрировано.
Представляет интерес?: Как заставить Elmah работать с атрибутом ASP.NET MVC [WikeError]? (Принятый ответ - Автор Эльмы)
Другие советы
Вы можете перечислить все загруженные модули (через Httpapplication.modules.) И если модуль Elmah существует, то Elmah включен:
foreach (var m in Application.Modules) {
if (m is Elmah.ErrorlogModule) {
// ...
}
}
Не уверен. Не правда это.
В дополнение к ответу Tadas я придумал следующий код, который работает для меня (обратите внимание, что я перевел это из VB, не проверяя, как он компилируется, так что YMMV):
bool foundElmah = false;
foreach (var m in HttpContext.Current.ApplicationInstance.Modules) {
var module = HttpContext.Current.ApplicationInstance.Modules.Item(m);
if (module is Elmah.ErrorLogModule || module is Elmah.ErrorMailModule || module is Elmah.ErrorFilterModule || module is Elmah.ErrorTweetModule) {
foundElmah = true;
break;
}
}
if (foundElmah) {
// do something here, like populate the application cache so you don't have to run this code every time
return true;
} else {
// store in application cache, etc.
return false;
}
Это также оказывается вокруг проблем, которые я имел с получением отклика 401 при запросе Elmah.axd (я использовал аутентификацию Windows), и гораздо быстрее, и не принимает определенное место для Elmah.axd.