C#中如何登录到控制台

How to log to console in c#

我想使用 Microsoft.Extensions.Logging 将内容记录到控制台。我是这样设置的:

static void Main()
{
    ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    ILogger logger = loggerFactory.CreateLogger<Program>();
    logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}

但是,没有任何内容写入控制台。

问题是 ConsoleLoggerProviderAddConsole 添加到 loggerFactory,是 IDisposable 并且必须被处理掉,以便刷新输出。处理 loggerFactory 将实现这一点。因此,要么在程序末尾调用 loggerFactory.Dispose(),要么在创建 loggerFactory 时添加 using,如下所示:

static void Main()
{
    using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    ILogger logger = loggerFactory.CreateLogger<Program>();
    logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}

我认为最简单的方法(不使用 GenericHost)是使用 ServiceCollection 独立的。

public static void Main()
{
    var collection = new ServiceCollection();
    collection.AddLogging(b => {
        b.AddConsole();
        b.SetMinimumLevel(LogLevel.Information);
    });
    var sp = collection.BuildServiceProvider();

    using(var scope = sp.CreateScope())
    {
        var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
        logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
    }
}

.netfiddle example