“ILoggerFactory”不包含“AddConsole”的定义

Dra*_*ago 57 c# core nuget discord.net

private ILoggerFactory ConfigureLogging(ILoggerFactory factory)
{
      factory.AddConsole();
      return factory;
}
Run Code Online (Sandbox Code Playgroud)

我在Github上找到了上面的一段代码。它给出了以下错误:

“ILoggerFactory”不包含“AddConsole”的定义,并且最佳扩展方法重载“ConsoleLoggerExtensions.AddConsole(ILoggingBuilder)”需要类型为“ILoggingBuilder”的接收器

我使用的是 NET Core 3.0,并且安装了以下 NuGet 包。

<PackageReference Include="Discord.Net" Version="2.1.1" />
<PackageReference Include="Discord.Net.Commands" Version="2.1.1" />
<PackageReference Include="Discord.Net.WebSocket" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0" />
Run Code Online (Sandbox Code Playgroud)

为什么我得到那个ILoggerFactory 没有方法AddConsole()?我怎样才能解决这个问题?

cru*_*dev 81

我刚刚在学习 Pluralsight 课程后遇到了这个问题。在下一张幻灯片解释为什么他们的 .AddConsole 在 ILoggerFactory.Create 中工作之前,我先于自己。

即使您只需要using Microsoft.Extensions.Logging在您的类中,您也需要显式添加对 .Net Core 应用程序的包引用,以便找到 .AddConsole 方法。

dotnet add package Microsoft.Extensions.Logging.Console
Run Code Online (Sandbox Code Playgroud)

并将此 using 语句添加到您的代码中

using Microsoft.Extensions.Logging;
Run Code Online (Sandbox Code Playgroud)

  • 我讨厌扩展方法。 (12认同)
  • 如果我的智能感知还没有完全脑死亡,这种必要性在次要版本上似乎是绝对任意的。我正在查看两个分别引用 5.0.8 和 5.0.12 的独立项目,前者需要它,而后者则不需要。 (2认同)

Wil*_*gno 22

尝试在核心 3.0 中使用 ServiceCollection 配置日志记录

private IServiceCollection ConfigureLogging(IServiceCollection factory)
{
      factory.AddLogging(opt =>
                         {
                               opt.AddConsole();
                         })
      return factory;
}
Run Code Online (Sandbox Code Playgroud)


Bre*_*ant 22

有一个单独的问题在起作用,以前 AddConsole() 的签名需要 ILoggerFactory,此后已更改为 ILoggerBuilder,如错误消息中所暗示的那样。

以下似乎是建立新控制台记录器的新方法:

var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());

  • 这对我使用 dotnet 5 有用 (3认同)

小智 7

在 .NET Core 3.0 中,添加控制台日志记录完全不同。您必须使用 LoggerFactory.Create() 来添加它。 在这里查看微软文档

  • 即使 MS 提供的示例不起作用,这也不起作用 (3认同)
  • 如果如上所述找不到“AddConsole()”,请将对“Microsoft.Extensions.Logging.Console”的引用添加到您的 csproj 中,它将起作用。 (2认同)

小智 7

通过执行类似的操作,我在 .NET Core 5.0 中解决了这个问题。具有依赖注入的控制台示例

    public static void Main(string[] args)
    {
        //setup our DI
        var serviceProvider = new ServiceCollection()
            .AddLogging(c => c.AddConsole(opt => opt.LogToStandardErrorThreshold = LogLevel.Debug))
            .AddSingleton<IFooService, FooService>()
            .AddSingleton<IBarService, BarService>()
            .BuildServiceProvider();

        var logger = serviceProvider.GetService<ILoggerFactory>()
            .CreateLogger<Program>();
        logger.LogDebug("Starting application");

        //do the actual work here
        var bar = serviceProvider.GetService<IBarService>();
        bar.DoSomeRealWork();

        logger.LogDebug("All done!");
    }
Run Code Online (Sandbox Code Playgroud)

  • 一旦您包含额外的 nuget 包 Microsoft.Extensions.Logging.Console,此操作就会起作用 (3认同)