如何在 .NET 6 class 库中初始化 ILogger?

How do I initialize an ILogger in a .NET 6 class library?

我有一个 class 库,供控制台应用程序使用。我现在想通过构造函数注入在我的 class 库中添加一个 ILogger<T>。我想到了这样的事情:

public class Class1
{
    private readonly ILogger<Class1> _logger;

    public Class1(ILogger<Class1> logger)
    {
        _logger = logger;
    }
}

然而我不知道如何交出ILogger<T>

public class Program
{
    public static void Main(string[] args)
    {
        Class1 clazz = new Class1(?????);
    }
}

我们可以尝试使用ServiceCollection which can be restored from Microsoft.Extensions.DependencyInjection

ServiceCollection 可以将 Class1 class 注册到 DI 容器,如果我们正确注册 class,ILogger<Class1> 可能会自动注入。

var services = new ServiceCollection();
services.AddLogging(configure => configure.AddConsole());
services.AddTransient<Class1>();
ServiceProvider serviceProvider = services.BuildServiceProvider();
Class1 clazz = serviceProvider.GetRequiredService<Class1>();

c# online

我建议使用 Microsoft.Extensions.Logging 来实现我们的日志机制,该机制由 Microsoft 提供基础结构默认实现。

此外,许多流行的 open-source 日志项目将支持和扩展 Microsoft.Extensions.Logging,例如 Serilog.Extensions.Logging,NLog.Extensions.Logging...

这样我们就可以轻松更改不同的记录器架构,如果该架构扩展 Microsoft.Extensions.Logging

services.AddLogging(configure => configure.AddNLog());
services.AddLogging(configure => configure.AddSerilog());