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

.NET Core Serilog测试疑问:为何需AddLogging注册ILogger

问题原因解析

核心差异在于你使用的AddSerilog重载和官方文档默认的集成场景不同:

  • 官方文档里提到的“无需AddLogging(b => b.AddSerilog())”,是针对**通过Host.CreateDefaultBuilder().UseSerilog()**的集成方式。这个方法内部会自动完成两件事:

    1. 初始化Microsoft.Extensions.Logging的基础服务(包括LoggerFactory和ILogger<T>的创建工厂);
    2. 将Serilog注册为日志提供者,打通Serilog和MS Logging体系的关联。
  • 而你在测试中直接调用serviceCollection.AddSerilog(),这个重载仅注册了Serilog自身的核心服务(比如Serilog.ILogger),没有初始化MS Logging的基础服务,也没有把Serilog接入MS Logging的提供者体系。ILogger<T>是由MS Logging的LoggerFactory创建的,此时这个工厂根本不知道Serilog的存在,自然无法解析ILogger<SerilogLoggingTests>。

  • 当你添加serviceCollection.AddLogging(b => b.AddSerilog())时:

    1. AddLogging()会先注册MS Logging的全套基础服务(包括ILogger<T>的依赖链);
    2. b.AddSerilog()则把Serilog添加为日志提供者,让LoggerFactory知道要通过Serilog来创建日志实例,因此GetRequiredService<ILogger<T>>可以正常工作。

测试场景的替代写法

如果不想用链式调用,也可以拆分两步达到同样效果:

// 先初始化MS Logging基础服务
serviceCollection.AddLogging();
// 再将Serilog注册为日志提供者
serviceCollection.AddSerilog();

内容的提问来源于stack exchange,提问作者harishr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:47:36