2017-04-11 58 views
1

设置我们有一个多租户MVC应用程序,这意味着完全相同的应用程序发布到多个IIS虚拟目录/应用程序,然后应用程序自身的工作出是谁,并相应地调整其自我(css)。如何重写ELMAH APPLICATIONNAME在Web.config中

这一切都非常好,但任何由ELMAH我们ELMAH数据库中记录得到相同的applicationName下登录,因为这是拉出下面这里的一切将被记录为“MyappName的” web.config ELMAH节:

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

因此,问题是如何覆盖web.config中的applicationName设置与特定的东西,所以我们可以区分给定租户网站的错误。

回答

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; 
}; 
+0

嗨卢克感谢输入。不幸的是,这不会起作用,因为我们没有为每个客户(即租户)进行转换,而且这基本上是我想在ELMAH中显示的客户/租户名称。 我们使用变换为DEV,UAT和生活环境,但之间的差异不是每个客户,因为我们不希望200多个项目配置和因此可能变换。 –

+0

这是有可能在您的部署很容易实现自动化,如果你知道哪些租户被部署到哪个位置,它是用正确的细节修补CONFIGS的绝好机会。 – Luke

+1

我刚刚添加了一些代码,我不知道它是否会工作。我假设你正在登录到SQL。 – Luke