Elmah 应用名称配置

Elmah Application Name Configuration

我想使用 Elmah 将来自多个客户的 ASP.net Web 表单应用程序的错误记录到中央错误数据库,每个错误都使用唯一的应用程序名称记录。

我知道这可以在 web.config 的 elmah.errorLog.applicationName 属性中轻松设置,但我们所有的客户都有标准的 web.config 文件,每个系统在 [=] 中都有独特的设置web.config.

中的 configSourcefile 属性引用的 35=] 和 connectionStrings.config 文件

由于web.config中的elmahsectionGroup不允许使用fileconfigSource,我如何设置applicationName Elmah 对每个系统都是唯一的?

我不想以编程方式设置 web.config 中的属性,因为将来 web.config 被覆盖时它可能会丢失。

我试过在Global.asax.Application_Start()中设置ErrorLog.ApplicationName 属性,像这样,但是我设置的值被忽略了。

Dim logger As Elmah.ErrorLog = Elmah.ErrorLog.GetDefault(Nothing)
logger.ApplicationName = "Testing 123"

任何建议将不胜感激,因为 Elmah 满足我们的所有需求,我们只需要能够唯一地识别它在中央错误数据库中记录的错误。

如果您的部署系统允许为每个客户设置单独的应用程序,您可以在 ELMAH 中使用错误过滤功能,使用应用程序设置中的应用程序名称丰富所有错误。查看此博客 post 了解详细信息:Enrich ELMAH errors using error filtering hook

简而言之,您消除了所有错误并记录了一个新错误,包括配置中的应用程序名称:

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
{
    var httpContext = args.Context as HttpContext;
    if (httpContext != null)
    {
        var error = new Error(args.Exception, httpContext);
        error.ApplicationName = ConfigurationManager.AppSettings["AppName"];
        ErrorLog.GetDefault(httpContext).Log(error);
        args.Dismiss();
    }
}

在发现 this SO post 之后,我现在已经成功地为 Elmah 设置了外部配置文件。

web.configelmah 部分如下所示:

  <elmah>
        <errorLog configSource="Config\Elmah\elmahErrorLog.config" />        
        <errorMail configSource="Config\Elmah\elmahErrorMail.config" />
        <errorFilter configSource="Config\Elmah\elmahErrorFilter.config" />        
        <security allowRemoteAccess="false" />
  </elmah>

其中内容如下; elmahErrorLog.config:

<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ErrorLog" applicationName="My Unique Application Name" />

elmahErrorFilter.config(此配置阻止本地主机请求的电子邮件通知):

<errorFilter>
  <test>
    <and>
      <equal binding="Context.Request.IsLocal" value="True" type="Boolean" />
      <regex binding="FilterSourceType.Name" pattern="mail" />
    </and>
  </test>
</errorFilter>

elmahErrorMail.config:

<errorMail from="foo"
           to="foo"
           subject="My Exception - {0}"
           async="false"           
           smtpServer="foo"
           userName="foo"
           password="foo">
</errorMail>