.NET Core 6中的控制台日志记录?

15

我正在使用 .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
4个回答

19
只是为了提供一个完整的工作示例,适用于.NET Core 6。 您应该将包Microsoft.Extensions.Logging.Console添加到项目中。 (在我的情况下,它的版本是6.0.0

Program.cs

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

ServiceProvider serviceProvider = new ServiceCollection()
    .AddLogging((loggingBuilder) => loggingBuilder
        .SetMinimumLevel(LogLevel.Trace)
        .AddConsole()
        )
    .BuildServiceProvider();

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

//Now both are working
logger.LogDebug("Debug World");         
logger.LogInformation("Hello World");

另请参阅:

1
这正是我需要的。我需要安装“Console”提供程序。谢谢! - Casper Wilkes

5

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

builder.SetMinimumLevel(LogLevel.Debug);

我之前已经做过了,但是没有起作用。现在因为某种原因它可以工作了???好吧,谢谢! - a11smiles

4

有关如何在主要程序中创建日志的文档:

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

一旦您通过CreateDefaultBuilder创建了一个IHost,这将允许您利用appsettings.json文件(请参见配置日志记录):

{
  "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>

0

默认情况下,只会显示信息及以上级别的日志(警告、错误、严重)。

您需要添加配置才能获取更低级别的日志,如调试信息(Debug)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接