如何以编程方式确定是否启用了ELMAH?
答案 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假定特定位置。