You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 23:54:01