使用Logging.AddSerilog与Services.AddSerilog注册Serilog有何差异?
这两种注册方式本质是Serilog适配不同.NET依赖注入体系的实现,核心差异主要体现在以下几点:
所属扩展体系不同
旧方式的builder.Logging.AddSerilog()是针对ILoggingBuilder的扩展,属于Serilog.Extensions.Hosting命名空间,专门围绕日志系统的配置做扩展;新方式的builder.Services.AddSerilog()是针对IServiceCollection的扩展,属于Serilog.AspNetCore命名空间,把Serilog的注册整合到通用服务注入流程里。配置逻辑侧重点不同
旧方式更偏向直接操作日志提供器,比如可以配合ClearProviders()移除默认日志组件,快速替换成Serilog;新方式则是把Serilog作为一项服务注册到DI容器,注册时还能直接传入自定义配置逻辑(比如AddSerilog((services, config) => { config.WriteTo.Console(); })),和其他服务的注册逻辑更统一,灵活性更高。ASP.NET Core集成深度不同
旧方式只是单纯把Serilog添加为日志提供器,功能相对基础;新方式是官方当前主推的ASP.NET Core集成方案,除了注册日志提供器,还会自动处理ASP.NET Core特有的细节,比如请求日志联动、主机生命周期适配等,更贴合现代ASP.NET Core的架构设计。版本适配性不同
旧方式是Serilog早期扩展提供的,兼容.NET Core 3.x及更早版本;新方式是Serilog.AspNetCore新版本推出的,适配.NET 5+及后续的ASP.NET Core DI体系。
内容的提问来源于stack exchange,提问作者lonix

