Serilog配置Microsoft日志级别为Warning仍输出Information级请求日志如何解决
问题根因
你遇到的是Serilog接管ASP.NET Core日志管线不彻底导致的级别过滤规则不生效问题,核心原因是UseSerilog的调用位置错误,导致ASP.NET Core默认的日志规则没有被完全覆盖,内置的Microsoft命名空间下的请求日志依然按默认级别输出。
解决方案
1. 修正Serilog注册位置
UseSerilog需要直接挂载在HostBuilder层级,而不是嵌套在ConfigureWebHostDefaults委托内,这样才能完全替换默认日志管线。修正后的启动代码如下:
return Host.CreateDefaultBuilder(args) // 把UseSerilog移到HostBuilder层级,在ConfigureWebHostDefaults之前调用 .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration .ReadFrom.Configuration(hostingContext.Configuration) .Enrich.FromLogContext()) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
2. 补全Sink程序集配置
你当前配置的Using节点只声明了Console sink的程序集,缺少Seq和File sink对应的程序集引用,虽然不影响级别过滤,但会导致sink加载异常,补充后配置如下:
"Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Seq", "Serilog.Sinks.File" ], // 其余原有配置保持不变 }
3. 兜底精准过滤规则
如果修改后仍有多余的请求日志输出,可以先在Console输出模板中添加{SourceContext}字段,确认日志的真实命名空间,再补充精准的覆盖规则,比如常见的请求日志所属命名空间的过滤配置:
"MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "Microsoft.AspNetCore.Hosting.Diagnostics": "Warning", "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Warning", "Microsoft.AspNetCore.HttpLogging": "Warning", "System": "Warning" } }
内容的提问来源于stack exchange,提问作者Zoinky
相关产品推荐
相关产品推荐

