如何实现ILoggerFactory

问题描述 投票:0回答:1

我知道

ILoggerFactory
使我能够按名称创建记录器提供程序。

我到底该怎么做?

假设我有

LoggerProvider1
LoggerProvider2

这是我的

Program.cs
文件:

srv.AddLogging(builder =>
{
    builder.ClearProviders();
    builder.AddProvider(new LoggerProvider1());
    builder.AddProvider(new LoggerProvider2());
});

我需要在这里做什么?

public class MyFactory : ILoggerFactory
{
}

MyFactory
文件中哪里加载
Program.cs

如何这样称呼

ILoggerFactory

ILoggerFactory factory;
factory.CreateLogger<HomeController>("LoggerProvider1");
factory.CreateLogger<HomeController>("LoggerProvider2");
asp.net logging .net-8.0
1个回答
0
投票

Factory是日志记录中的最高级别。默认情况下,一旦您构建应用程序,Asp.Net 就会将其实例添加到服务中。

LoggerProvider 是此工作流程的中间层。工厂内可以有一个或多个提供者,他们的工作是创建用于记录数据的

Logger
实例。

Logger 是最低级别的日志记录,您需要与之交互来记录数据。

由于.NET已经为您创建了工厂,您需要向其中添加提供程序。 您可以使用您编写的代码来做到这一点:

srv.AddLogging(builder =>
{
    builder.ClearProviders();
    builder.AddProvider(new LoggerProvider1());
    builder.AddProvider(new LoggerProvider2());
});

剩下要做的唯一一件事就是使用依赖注入获取

ILogger
的实例(将由提供者自动创建)。

因此,如果您想在

MyClass
中记录某些内容,您可以这样做:

public class MyClass
{
    public MyClass(ILogger logger)
    {
        logger.LogInformation("Hello from logger");
    }
}

或更常见:

public class MyClass
{
    public MyClass(ILogger<MyClass> logger)
    {
        logger.LogInformation("Hello from logger");
    }
}

为了能够在其他方法中使用它,请将其拉出:

public class MyClass
{
    private readonly ILogger<MyClass> _logger;
    public MyClass(ILogger<MyClass> logger)
    {
        _logger = logger;
    }

    public void Log()
    {
        _logger.LogInformation("Hello from another method");
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.