You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function使用Serilog如何配置仅保留应用相关业务日志

问题原因

你漏了Service Bus相关日志源的级别覆盖配置。你看到的ReceiveBatchAsync、消息处理器启动这类INFO级日志,来自Azure Service Bus SDK、Functions Service Bus绑定扩展两个组件,你现有配置的覆盖规则没有包含这两个命名空间,所以这部分日志没有被过滤。

调整方案

1. 补充缺失的命名空间过滤规则

在现有LoggerConfiguration的Override配置块中,追加Service Bus相关组件的级别配置,将这部分日志的最低输出级别设为Warning,即可过滤掉你贴出来的所有队列操作冗余INFO日志:

// 追加以下三行配置
.MinimumLevel.Override("Azure.Messaging.ServiceBus", LogEventLevel.Warning) // Service Bus SDK本身的日志
.MinimumLevel.Override("Microsoft.Azure.WebJobs.ServiceBus", LogEventLevel.Warning) // In-process模型下Functions Service Bus绑定日志
.MinimumLevel.Override("Microsoft.Azure.Functions.Worker.ServiceBus", LogEventLevel.Warning) // Isolated Worker模型下Functions Service Bus绑定日志

2. (推荐)采用默认高等级+业务命名空间白名单的配置模式

如果要彻底避免后续新增组件带来的冗余日志,不要只靠黑名单逐个屏蔽框架日志,反过来配置全局默认最低输出级别为Warning,仅把你自己业务代码所在的命名空间放开到Information级别,从根源上只输出业务日志。完整配置示例如下:

var logger = new LoggerConfiguration()
    // 全局默认仅输出Warning及以上级别日志
    .MinimumLevel.Warning()
    // 替换成你自己业务代码的实际根命名空间,仅放开这部分的INFO级别日志
    .MinimumLevel.Override("YourBusinessNamespace", LogEventLevel.Information)
    // 原有框架日志兜底过滤配置
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .MinimumLevel.Override("Worker", LogEventLevel.Warning)
    .MinimumLevel.Override("Host", LogEventLevel.Warning)
    .MinimumLevel.Override("Host.Aggregator", LogEventLevel.Warning)
    .MinimumLevel.Override("Host.Results", LogEventLevel.Warning)
    .MinimumLevel.Override("System", LogEventLevel.Error)
    .MinimumLevel.Override("Function", LogEventLevel.Error)
    .MinimumLevel.Override("Azure.Storage.Blobs", LogEventLevel.Error)
    .MinimumLevel.Override("Azure.Core", LogEventLevel.Error)
    // 新增的Service Bus过滤配置
    .MinimumLevel.Override("Azure.Messaging.ServiceBus", LogEventLevel.Warning)
    .MinimumLevel.Override("Microsoft.Azure.WebJobs.ServiceBus", LogEventLevel.Warning)
    .MinimumLevel.Override("Microsoft.Azure.Functions.Worker.ServiceBus", LogEventLevel.Warning)
    // 后续接你的WriteTo等其他配置
    .CreateLogger();

3. 未知冗余日志排查方法

如果后续还有未识别的冗余INFO日志输出,可以临时修改Serilog的输出模板,加入{SourceContext}字段,直接打印每条日志所属的源命名空间,针对对应命名空间追加过滤规则即可,无需猜解日志来源。示例输出模板配置:

var logger = new LoggerConfiguration()
    // 其他配置省略
    .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {SourceContext} {Message:lj}{NewLine}{Exception}")
    .CreateLogger();

调整后每条日志都会携带类似Azure.Messaging.ServiceBus.Receiver这样的源标识,直接对根命名空间加Override规则即可。


内容的提问来源于stack exchange,提问作者user584018

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:15:40