.NET5.0实现Application Insights日志时注入ILogger无法解析服务报错
问题根因
你遇到的报错核心是.NET 默认依赖注入容器仅注册了泛型版本的ILogger<TCategoryName>,未注册非泛型的ILogger接口,控制器构造函数直接注入非泛型ILogger时找不到对应服务,该报错和Application Insights的配置无关。
解决方案
- 方案1(官方推荐):将控制器构造函数的注入类型替换为泛型
ILogger<TCategoryName>,其中泛型参数为当前控制器的类型
示例代码:public class ReportExtractionController : ControllerBase { private readonly ILogger<ReportExtractionController> _logger; private readonly My_DevContext _context; private readonly IKipReport _kipReport; // 构造函数注入泛型ILogger public ReportExtractionController(ILogger<ReportExtractionController> logger, My_DevContext context, IKipReport kipReport) { _logger = logger; _context = context; _kipReport = kipReport; } [HttpGet] public IActionResult Get() { _logger.LogError("Trial"); return Ok(); } } - 方案2(特殊场景需要使用非泛型ILogger时使用):手动在
Startup.ConfigureServices中注册非泛型ILogger服务
示例配置:public void ConfigureServices(IServiceCollection services) { // 原有Application Insights配置保持不变 services.AddApplicationInsightsTelemetry(Configuration["ApplicationInsights:InstrumentationKey"]); // 手动注册非泛型ILogger,关联到对应分类的日志实例 services.AddSingleton<ILogger>(sp => { var loggerFactory = sp.GetRequiredService<ILoggerFactory>(); return loggerFactory.CreateLogger("ReportExtractionLog"); }); // 其余服务注册逻辑保持不变 services.AddControllers(); // ...其他配置 }
验证操作
修改完成后重新启动项目调用接口,不会再出现500错误,LogError输出的内容会同步上报到Application Insights的Traces表中,严重级别对应Error。
内容的提问来源于stack exchange,提问作者Sandeep Thomas
相关产品推荐
相关产品推荐

