确定ELMAH是否已启用?

时间:2010-01-31 05:19:03

标签: c# asp.net elmah

如何以编程方式确定是否启用了ELMAH

3 个答案:

答案 0 :(得分:2)

您可以枚举所有已加载的模块(通过HttpApplication.Modules),如果Elmah模块存在,则启用Elmah:


foreach (var m in Application.Modules) {
  if (m is Elmah.ErrorlogModule) {
   // ...
  }
}

不确定。没有这个。

答案 1 :(得分:1)

由于:

  

ELMAH可以动态添加到   运行ASP.NET Web应用程序,或   甚至所有ASP.NET Web应用程序都在   机器,没有任何需要   重新编译或重新部署。

你不应该检测它是否存在。只需将您的日志记录代码写为存在,如果不存在,则不会记录任何内容。

感兴趣?:How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?(接受的回答是ELMAH的作者)

答案 2 :(得分:0)

除了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;
}

这也解决了我在请求elmah.axd(我使用的是Windows身份验证)时获得401响应时遇到的问题,并且速度更快,并且没有为elmah.axd假定特定位置。