我正在尝试使用日志记录在 ASP.NET Core 3 中运行 API 服务,但是在尝试从依赖项服务检索 ILogger 时,我不断收到错误消息。我想我已经遵循了我能找到的例子,但我不断得到:
“System.InvalidOperationException:'在尝试激活'GMT.Beacon.Service.Startup'时无法解析类型'Microsoft.Extensions.Logging.ILogger`1[GMT.Beacon.Service.Startup]'的服务。'”
我使用默认模板来启动项目,因此它通过默认构建器设置网络主机,根据文档应该自动配置日志记录。此外,我尝试手动添加提供程序,但出现相同的错误。我觉得我错过了一些明显的东西,但无法弄清楚是什么。
这是出错的 Program.cs 类:
public class Program {
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
public static void Main(string[] args) {
var host = CreateHostBuilder(args).Build();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Test log entry.");
host.Run();
}
}
在 Startup.cs 类中,这是构造函数:
public Startup(IConfiguration config, IHostEnvironment hosting, ILogger<Startup> logger) {
_hosting = hosting;
_config = config;
_logger = logger;
_logger.LogInformation($"{DateTime.UtcNow:R} - Starting (Environment={_hosting.EnvironmentName}; " + $"InformationalVersion={Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion};");
}
根据我可以找到的文档,这似乎应该可以工作,但它会在线抛出上述错误:
var host = CreateHostBuilder(args).Build();
我也尝试过手动配置日志记录(使用下面的代码),但返回相同的错误。
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) => {
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddEventSourceLogger();
logging.AddConsole();
logging.AddDebug();
})
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
有没有人发现这个设置有问题,或者知道如何在 ASP.NET Core 3 中正确配置日志子系统?
这在 ASP.NET Core 3 中发生了变化。请参阅此处的公告:
TLDR:唯一类型的启动构造器注入的通用主机支持的
IHostEnvironment
,IWebHostEnvironment
和IConfiguration
。使用 WebHost 的应用程序不受影响。
ILogger<T>
可注入Configure
,因此您可以从那里访问它以记录您的启动消息:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
logger.LogInformation(...);
// ...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句