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)
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());
小智 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)