【问题标题】:How to override Elmah applicationname set in Web.config如何覆盖在 Web.config 中设置的 Elmah 应用程序名称
【发布时间】:2017-04-11 15:19:57
【问题描述】:

我们有一个多租户的 MVC 应用程序,这意味着完全相同的应用程序被发布到多个 IIS 虚拟目录/应用程序,然后应用程序自己确定自己是谁,并相应地为其自身 (css) 设置皮肤。

这一切都很好,但是 ELMAH 在我们的 elmah 数据库中记录的任何内容都会记录在相同的 applicationName 下,因为这是从下面的 Web.Config elmah 部分中提取的,所有内容都将记录为“MyappName”:

<configuration>
  [...]
  <elmah>
    <security allowRemoteAccess="false" /> 
    <errorLog 
        type="Elmah.SqlErrorLog, Elmah" 
        connectionStringName="elmah" 
        applicationName="MyappName" />
  </elmah>
</configuration>

因此,问题是如何使用特定内容覆盖 web.config 中的 applicationName 设置,以便我们可以区分给定租户网站的错误。

【问题讨论】:

    标签: asp.net-mvc multi-tenant elmah


    【解决方案1】:

    由于这可以在 web.config 中进行配置,ELMAH 已经为您提供了一种在应用程序部署到不同位置时指定应用程序名称的方法 - 这只是利用它的一个案例。

    这通常是您在部署步骤中会操纵的东西。如果您手动进行,那会很痛苦,但可以通过使用 web.config 转换轻松操作。

    <?xml version="1.0"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
        <elmah>
            <errorLog applicationName="MyappName" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
        </elmah>
    </configuration>
    

    如果您将以下内容放入 Global.asax,我想知道以下内容是否可行:

    var service = ServiceCenter.Current;
    
    ServiceCenter.Current = context =>
    {
        var connectionString = "YOUR CONNECTION STRING";
        var container = new ServiceContainer(service(context));
        var log = new SqlErrorLog(connectionString) { ApplicationName = "APP NAME HERE" };
        container.AddService(typeof(ErrorLog), log);
        return container;
    };
    

    【讨论】:

    • 嗨,卢克,感谢您的意见。不幸的是,这不起作用,因为我们没有每个客户(即租户)的转换,它基本上是我希望在 ELMAH 中显示的客户/租户名称。我们针对 DEV、UAT 和 LIVE 环境之间的差异使用转换,但不是针对每个客户,因为我们不希望有 200 多个项目配置,因此可能需要转换。
    • 这可以在您的部署过程中轻松实现自动化,如果您知道将哪个租户部署到哪个位置,那么这是使用正确详细信息修补配置的绝佳机会。
    • 我刚刚添加了一些代码,我想知道它是否可以工作。我假设您正在登录 SQL。
    • 嗨,卢克,谢谢你 - 很高兴!你到底是从哪里弄来的?无论如何 - 干杯,并有一些观点:)
    • 我也是卢克 :) [Doffs hat]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2011-07-21
    • 2016-07-21
    相关资源
    最近更新 更多