我们有一个多租户的MVC应用程序,意味着完全相同的应用程序发布到多个IIS虚拟目录/应用程序,然后应用程序自己解决它是谁,并相应地皮肤自我(css)。 / p>
这一切都很好,但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设置,以便我们可以区分给定租户网站的错误。
答案 0 :(得分: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;
};