如何覆盖 Web.config 中设置的 Elmah 应用程序名称
How to override Elmah applicationname set in Web.config
我们有一个多租户 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 设置,以便我们可以区分给定租户网站的错误。
因为这在 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;
};
我们有一个多租户 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 设置,以便我们可以区分给定租户网站的错误。
因为这在 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;
};