Blazor Server应用Serilog日志冗余:如何仅记录自定义业务日志?
解决Serilog仅记录自定义日志、排除.NET/Azure冗余日志的问题
核心问题分析
你当前的配置错误在于把EF相关的日志级别设置放在了Serilog根节点,而Serilog的命名空间覆盖规则必须放在MinimumLevel.Override下,这就是之前设置无效的原因。
正确配置方案
1. 仅保留自定义应用日志(推荐)
要完全只记录你代码中通过_log.LogInformation/_log.LogError生成的日志,最直接的方式是:
- 将默认日志级别设为
None,关闭所有日志输出 - 仅显式允许你自己应用的根命名空间输出日志
修改appsettings.json中的Serilog配置:
"Serilog": { "MinimumLevel": { "Default": "None", // 默认关闭所有日志 "Override": { "YourAppNamespace": "Information" // 替换为你实际的项目根命名空间 // 若需保留框架关键错误日志,可添加: // "Microsoft.AspNetCore": "Error" } }, "WriteTo": [ { "Name": "Console", "Args": { "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u4}: {Message:lj}{NewLine}{Exception}]" } } ] }
注意:
YourAppNamespace是你项目的根命名空间,比如你注入ILogger<HomePage>时,HomePage所在的命名空间。
2. 针对性排除特定框架日志
如果需要保留部分框架日志,但要过滤EF Core、Azure等冗余内容,将规则放在MinimumLevel.Override下:
"Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft.AspNetCore": "Warning", // 仅保留AspNetCore警告及以上日志 "Microsoft.EntityFrameworkCore.Database.Command": "None", // 关闭EF命令日志 "Microsoft.EntityFrameworkCore.Infrastructure": "None", // 关闭EF基础设施日志 "Azure": "Warning" // 部署到Azure后,仅保留Azure警告及以上日志 } }, "WriteTo": [ { "Name": "Console", "Args": { "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u4}: {Message:lj}{NewLine}{Exception}]" } } ] }
3. Azure App Service部署后的处理
部署到Azure后,平台本身的启动、健康检查等日志会自动整合,但Serilog的配置只会过滤你的应用日志。若需调整Azure平台日志输出,可在Azure门户的应用服务 > 诊断设置中修改日志类别和级别。
验证配置
修改配置后重启应用,控制台将仅输出你自定义的日志内容,所有框架、EF、Azure冗余日志都会被过滤。
内容的提问来源于stack exchange,提问作者Caverman
相关产品推荐
相关产品推荐

