C# ILogger 不打印控制台输出

Tro*_*yvs 9 c# printing console ilogger

我使用 vs 2019 作为控制台应用程序(dotnet core 3.1),

Install-Package Microsoft.Extensions.Logging.Console -Version 3.1.2 
Run Code Online (Sandbox Code Playgroud)

和这段代码:

using Microsoft.Extensions.Logging;
class Program
{
    static void Main(string[] args)
    {
        var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder
                .AddFilter("Microsoft", LogLevel.Information)
                .AddFilter("System", LogLevel.Information)
                .AddFilter("TestRx.Program", LogLevel.Information)
                .AddConsole();
        });
        ILogger logger = loggerFactory.CreateLogger<Program>();
        logger.LogInformation("Example log message");
    }
}
Run Code Online (Sandbox Code Playgroud)

它在控制台上没有打印任何内容,为什么?

Fal*_*der 10

根据我的托管,我可以重现,似乎您需要处理 LoggerFactory 来刷新控制台输出。

这可能是较新的 .NET Core 版本的性能特性。Afaik 老的直接将其打印到控制台。

using var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddConsole();
});
                
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Example log message");
Run Code Online (Sandbox Code Playgroud)

您可以通过创建大量日志来观察日志记录的异步性质,然后稍等一下或直接退出程序:

ILogger logger = loggerFactory.CreateLogger<Program>();
for (int i = 0; i < 1000; i++)
{
    logger.LogInformation("Example log message2");
}
//Thread.Sleep(1000);
Run Code Online (Sandbox Code Playgroud)

睡眠将有助于刷新所有日志!