.NET Core 6 中的控制台登录?

Console Logging in .NET Core 6?

.NET 6 Core 用于控制台应用程序,我无法使调试日志记录正常工作(未显示任何内容)。而且,我已将 Microsoft.Extensions.Logging.Console 添加到项目中。

您将在下面看到我试图获取对记录器的引用的两种方法。

请注意 logger.LogInformation 有效,但 logger.LogDebug 无效。

问题:如何让 LogDebug 工作?

Program.cs

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

var serviceProvider = new ServiceCollection()
                            .AddLogging(builder => {
                                builder.ClearProviders();
                                builder.AddConsole();
                                builder.AddDebug();
                            })
                            .BuildServiceProvider();

// I've tried this
var logger = serviceProvider.GetService<ILogger<Program>>();

// And this
var logger = serviceProvider.GetService<ILoggerFactory>().CreateLogger<Program>>();

logger.LogDebug("hello world");       // <-- This DOESN'T work
logger.LogInformation("something");   // <-- This DOES work

您需要在日志中添加以下内容 Debug:

builder.SetMinimumLevel(LogLevel.Debug);

有关于如何 Create logs in Main:

的文档
IHost host = Host.CreateDefaultBuilder(args).Build();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogDebug("Host created.");
// ...

通过 CreateDefaultBuilder 创建 IHost 后,您就可以利用 appsettings.json 文件(参见 Configure logging):

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug", // set default logs to debug level
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

只是不要忘记将 appsettings.json 复制到 .csproj 文件中的输出。默认情况下,控制台应用程序不会这样做,而这正是我所缺少的。

<ItemGroup>
  <None Update="appsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>