ASP.NET MVC 应用程序中的多租户日志记录

2024-01-07

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

我看到从这个问题 https://stackoverflow.com/questions/308436/log4net-programmatically-specify-multiple-loggers-with-multiple-file-appenders我可以以编程方式创建额外的附加程序,然后它们可以记录到不同的日志文件。但这意味着对于一个类的每个实例,我必须继续调用

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

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

Thanks.


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

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

你的代码可能看起来像(摘自Autofac 维基 https://code.google.com/p/autofac/wiki/MultitenantIntegration)

    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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 应用程序中的多租户日志记录 的相关文章

随机推荐