Azure Web应用如何阻止Microsoft.AspNetCore.Hosting.Diagnostics日志输出?
解决方法
1. 修正Serilog配置拼写错误并添加精准级别覆盖
你配置里的Serilog:MinimimLevel:Override存在拼写错误,正确键名是Serilog:MinimumLevel:Override。先修正该错误,再针对Microsoft.AspNetCore.Hosting.Diagnostics设置None级别直接屏蔽其日志输出:
// appsettings.json 示例配置 { "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft.AspNetCore.Hosting.Diagnostics": "None" } }, // 你的其他Serilog配置(自定义格式化器、Sink等) } }
2. 用Serilog过滤器精准排除健康检查请求日志
如果全局屏蔽该上下文日志会影响其他有用日志,可通过Serilog过滤器只排除/api/health路径的相关日志:
在Program.cs配置Serilog时添加过滤规则:
Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .Filter.ByExcluding(evt => evt.Properties.TryGetValue("RequestPath", out var path) && path.ToString().Equals("\"/api/health\"") && evt.SourceContext == "Microsoft.AspNetCore.Hosting.Diagnostics") // 你的其他Serilog配置项 .CreateLogger();
3. 直接禁用健康检查中间件的日志输出
从源头阻止日志生成,在配置健康检查路由时关闭日志功能:
app.MapHealthChecks("/api/health", new HealthCheckOptions { LoggingEnabled = false });
也可以全局配置抑制健康检查输出:
builder.Services.AddHealthChecks() .AddCheck<YourCustomHealthCheck>("custom-health-check") .Configure<HealthCheckOptions>(options => { options.SuppressHealthCheckOutput = true; });
4. 确保仅保留Serilog日志提供者
如果仍有非自定义格式的日志输出,说明ASP.NET Core默认日志提供者未被移除。在Program.cs中清理默认提供者,只保留Serilog:
// 替换默认日志系统为Serilog builder.Host.UseSerilog(); // 清除所有默认日志提供者 builder.Logging.ClearProviders();
内容的提问来源于stack exchange,提问作者Stuart Hemming
相关产品推荐
相关产品推荐

