Вопрос

Как я могу определить программно, будь то или нет 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.

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