Serilog无法读取appsettings.json配置且不输出微软框架日志如何解决
问题原因及解决步骤
1. 核心原因说明
你当前的配置缺少两个关键环节:
- Serilog的全局过滤规则中,
Microsoft命名空间的日志级别设置过高,微软框架内部的运行日志(如EF Core SQL输出、请求处理日志等)大多为Debug/Verbose级别,你设置为Information自然无法输出 - 需确保微软官方的
ILogger接口输出已经正确桥接到Serilog的日志管道
2. 分步调整方案
第一步:检查依赖包完整性
确保项目已安装以下NuGet包(控制台应用场景):Serilog.Extensions.Hosting:实现Serilog和.NET通用宿主的日志桥接Serilog.Settings.Configuration:支持从appsettings.json读取Serilog配置- 对应你用到的Sink包:
Serilog.Sinks.Console、Serilog.Sinks.File
第二步:调整appsettings.json的日志级别配置
把Microsoft命名空间的覆盖级别调低到Debug,如果不需要System命名空间的冗余日志可以单独调高:
"Serilog": { "MinimumLevel": { "Default": "Debug", "Override": { "Microsoft": "Debug", // 如果只需要EF Core的SQL日志,单独配置即可,不需要全局开Microsoft的Debug "Microsoft.EntityFrameworkCore": "Debug", "System": "Warning" } } }
- 第三步:修正通用宿主的Serilog注入配置
调用UseSerilog时增加参数,明确将宿主内置的日志输出全部路由到Serilog:
AppHost = Host.CreateDefaultBuilder(args) // 增加writeToProviders: true参数,确保微软日志体系的输出全部接入Serilog .UseSerilog(Log.Logger, writeToProviders: true) .ConfigureServices((context, services) => { // 你原有服务注册逻辑保持不变 services.AddDbContext<TTApplicationDbContext>(options => { options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")); }); services.Configure<EmailSettings>(configuration.GetSection("EmailSettings")); services.Configure<SftpSettings>(configuration.GetSection("FtpSettings")); }) .Build();
补充说明
微软框架的所有内部日志都是通过依赖注入的ILogger<T>接口输出,只要正确配置了Serilog作为默认日志提供器,所有日志都会自动进入Serilog的输出管道,不需要额外修改微软框架的代码。
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

