【问题标题】:Determine whether or not ELMAH is enabled?确定是否启用了 ELMAH?
【发布时间】:2010-01-31 05:19:03
【问题描述】:

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

【问题讨论】:

  • 您能解释一下您的问题吗?就目前而言,这没有意义(对我而言)。
  • 当然。我将 ELMAH 与产品一起运送,但是否启用或禁用它是客户的决定(在 web.config 中)。我需要知道,当页面加载时,它是否已启用。我很乐意回答任何问题。
  • 不能只阅读相关的 web.config 部分吗?
  • 我想过这个问题,但我可能希望有别的东西,特别是考虑到 web.config 部分告诉您它是否启用从 IIS6 更改为 IIS7。例如,也许某些东西可以让我对给定路径的处理程序提供某种编程可见性......

标签: c# asp.net elmah


【解决方案1】:

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

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

不确定。没有树过这个。

【讨论】:

  • 我试过这个,但 Application.Modules 不可用(我已经有一段时间没有尝试过了——我可能记错了细节,但我无法实现)。你有用于执行此操作的实际代码吗?
【解决方案2】:

因为:

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

您不需要检测它是否存在。只需编写您的日志记录代码,就好像它存在一样,如果不存在,则不会记录任何内容。

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

【讨论】:

  • 我需要显示一个指向 elmah.axd 的链接。如果它被禁用,我不想显示链接?
  • 您可以向 elmah.axd 发出 Web 请求并检查状态码吗?也许只做一次并将结果存储在 Application 变量中以供将来使用。
  • @Greg:我希望避免这种开销。你的解决方案是我迄今为止编写的,因为它是我能想到的最好的。根据上面 Tadas 的回答,我将尝试查看已加载的模块列表。
【解决方案3】:

在 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 的特定位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2011-04-16
    相关资源
    最近更新 更多