如何过滤WebJob Application Insights中的Azure ServiceBus日志
问题场景
过滤ServiceBus触发的WebJob上报至Application Insights的信息级消息时,需要屏蔽以下两条系统自动生成的日志,仅保留业务代码自定义输出的信息级跟踪日志:
ReceiveBatchAsync start. MessageCount = 1
ReceiveBatchAsync done. Received '0' messages. LockTokens =
已测试的无效方案
目前已尝试两种常规日志过滤配置,均未达到预期效果:
- 在
program.cs中添加过滤代码:
b.AddFilter("Azure.Messaging.ServiceBus", LogLevel.Warning);
- 在
appsettings.json中添加全局日志等级配置:
"Logging": { "LogLevel": { "Default": "Information", "Azure.Messaging.ServiceBus": "Warning" } },
项目依赖
- Microsoft.Extensions.Logging.Console
- Microsoft.Azure.WebJobs.Extensions.ServiceBus
解决方案
之前配置不生效的核心原因有两点:
- 待屏蔽的两条
ReceiveBatchAsync日志实际归属类别为Microsoft.Azure.WebJobs.ServiceBus(ServiceBus WebJobs扩展的自有日志类别),而非Azure.Messaging.ServiceBus,原有过滤规则没有覆盖该类别 - Application Insights日志提供器默认不会完全继承全局日志过滤规则,需要单独为其配置过滤条件,否则规则不会作用于上报到AI的日志流。
Program.cs 代码配置
在日志配置段添加针对Application Insights提供器的过滤规则,覆盖两个ServiceBus相关日志类别即可:
// 过滤上报至Application Insights的ServiceBus系统日志 builder.Logging.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>( "Microsoft.Azure.WebJobs.ServiceBus", LogLevel.Warning); builder.Logging.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>( "Azure.Messaging.ServiceBus", LogLevel.Warning); // 如需同时屏蔽控制台输出的同类系统日志,补充全局过滤规则 builder.Logging.AddFilter("Microsoft.Azure.WebJobs.ServiceBus", LogLevel.Warning);
appsettings.json 配置
如果使用配置文件管理日志规则,需要单独为Application Insights提供器配置过滤节点,不能仅配置全局LogLevel:
"Logging": { "LogLevel": { "Default": "Information", "Azure.Messaging.ServiceBus": "Warning", "Microsoft.Azure.WebJobs.ServiceBus": "Warning" }, "ApplicationInsights": { "LogLevel": { "Microsoft.Azure.WebJobs.ServiceBus": "Warning", "Azure.Messaging.ServiceBus": "Warning" } } }
配置生效后,ServiceBus组件、WebJobs扩展生成的Information级系统日志会被完全拦截,业务代码自定义输出的Information级跟踪日志可正常上报、输出。
内容的提问来源于stack exchange,提问作者Kurt Camilleri
相关产品推荐
相关产品推荐

