2017-04-11 59 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