Asp.net mvc 如何覆盖Web.config中设置的Elmah applicationname
我们有一个多租户的MVC应用程序,这意味着完全相同的应用程序被发布到多个IIS虚拟目录/应用程序,然后应用程序自己确定自己是谁,并相应地对自己(css)进行蒙皮 这一切都很好,但是ELMAH在我们的ELMAH数据库中记录的任何内容都会以相同的应用程序名记录,因为这是从下面的Web.Config ELMAH部分中提取出来的,其中所有内容都将记录为“MyappName”:Asp.net mvc 如何覆盖Web.config中设置的Elmah applicationname,asp.net-mvc,multi-tenant,elmah,Asp.net Mvc,Multi Tenant,Elmah,我们有一个多租户的MVC应用程序,这意味着完全相同的应用程序被发布到多个IIS虚拟目录/应用程序,然后应用程序自己确定自己是谁,并相应地对自己(css)进行蒙皮 这一切都很好,但是ELMAH在我们的ELMAH数据库中记录的任何内容都会以相同的应用程序名记录,因为这是从下面的Web.Config ELMAH部分中提取出来的,其中所有内容都将记录为“MyappName”: [...] 因此,问题是如何使用特定的内容覆盖web.config中的applicationName设置,以便我们能够区分给
[...]
因此,问题是如何使用特定的内容覆盖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>
嗨,卢克,谢谢你的意见。不幸的是,这不起作用,因为我们没有针对每个客户(即租户)的转换,而且它基本上就是我希望在ELMAH中显示的客户/租户名称。我们使用转换来解决开发、UAT和实时环境之间的差异,但不是针对每个客户,因为我们不需要200多个项目配置,因此可能需要进行转换。如果您知道将哪个租户部署到哪个位置,那么在部署过程中可以轻松实现自动化,这是用正确的细节修补配置的绝佳机会。我刚刚添加了一些代码,我想知道它是否能工作。不过,我假设您正在登录SQL。嗨,卢克,谢谢您的帮助,真是太棒了!你到底从哪里弄来的?无论如何-干杯,还有一些要点:)我也是卢克:)[脱下帽子]
<?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>
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;
};