gpt4 book ai didi

asp.net - ASP.NET MVC 应用程序中的 Multi-Tenancy 日志记录

转载 作者:行者123 更新时间:2023-12-02 18:26:31 25 4
gpt4 key购买 nike

我在 ASP.NET MVC 5 中有一个 Multi-Tenancy 应用程序,可以接受来自多个公司的客户端登录。目前,我使用 log4net 来记录文件,但它将所有公司的所有日志放在一个文件中。理想情况下,我想将日志文件分开,以便每个公司的日志都位于其自己的文件夹中。

我从this question看到我可以以编程方式创建额外的附加程序,然后它们可以记录到不同的日志文件。但这意味着对于类的每个实例,我必须继续调用

ILog log = LogManager.GetLogger("CompanyA");

获得正确的记录器,对吗?有更好的方法吗?如果需要的话,我也愿意使用其他记录器。

谢谢。

最佳答案

您在应用程序中使用 Ioc 容器吗?我能够使用 AutoFac MultitenantContainer 解决类似的问题。您需要遵循的步骤

  1. 定义用于识别每个租户的策略。
  2. 使用 Autofac 容器注册通用记录器接口(interface)
  3. 为每个租户注册特定的记录器。

您的代码可能如下所示(摘自 Autofac wiki )

    var tenantIdStrategy = new RequestParameterTenantIdentificationStrategy("tenant");
var builder = new ContainerBuilder();
builder.RegisterType<BaseDependency>().As<IDependency>();

// If you have tenant-specific controllers in the same assembly as the
// application, you should register controllers individually.
builder.RegisterType<HomeController>();

// Create the multitenant container and the tenant overrides.
var mtc = new MultitenantContainer(tenantIdStrategy, builder.Build());
mtc.ConfigureTenant("CompanyA",
b =>
{
b.RegisterType<Tenant1Dependency>().As<IDependency>().InstancePerDependency();
b.RegisterType<Tenant1Controller>().As<HomeController>();
});

如果这是您需要区分租户并且此时不想 Ioc 的唯一实例,您可以像这样创建工厂

static class LogFactory
{
public static ILog GetLogger()
{
var requestUri = HttpContext.Current.Request.Url.AbsoluteUri;
switch (requestUri)
{
case "companyA.domain.com":
return LogManager.GetLogger("CompanyA");
case "companyB.domain.com":
return LogManager.GetLogger("CompanyB");
default:
return LogManager.GetLogger("default");
}
}
}

现在使用工厂而不是直接使用 Logmanager

 ILog logger = LogFactory.GetLogger();

关于asp.net - ASP.NET MVC 应用程序中的 Multi-Tenancy 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com