配置Azure WebJob SDK日志过滤器:代码生效配置文件失效求助
.NET Core 7 WebJob 中通过配置文件过滤 Azure.Core 日志的解决方案
问题
使用.NET Core 7和WebJob SDK构建WebJob时,Azure.Core组件会输出大量冗余日志。通过代码硬编码设置日志过滤器可以生效,但使用appsettings配置文件的方式无法实现日志过滤,希望通过配置文件或环境变量实现日志规则的可配置。
现有方案回顾
有效方案(代码硬编码)
直接在日志配置中添加过滤器,可成功过滤Azure.Core日志:
builder.ConfigureLogging((context, b) => { b.AddConsole(); b.AddFilter("Azure.Core", LogLevel.None); // 此方式有效 });
无效方案
- 直接复用Web应用的appsettings配置,无法生效:
"Logging": { "LogLevel": { "Default": "None", "Azure.Core": "None" } },
- 尝试添加
AddConfiguration但未正确配置,同样无效:
builder.ConfigureLogging((context, b) => { b.AddConfiguration(context.Configuration); // 未正确生效 b.AddConsole(); });
正确解决方式
WebJob的日志配置逻辑与普通Web应用存在差异,需要确保配置针对日志提供器生效,同时正确加载配置节。
1. 正确的appsettings配置格式
方式一:针对控制台提供器单独配置
仅过滤控制台输出中的Azure.Core日志:
"Logging": { "Console": { "LogLevel": { "Default": "Information", "Azure.Core": "None" } }, "LogLevel": { "Default": "Information" } }
方式二:全局过滤所有日志提供器的Azure.Core日志
对所有日志输出渠道生效:
"Logging": { "LogLevel": { "Default": "Information", "Azure.Core": "None" } }
2. 正确加载配置的代码
需要明确指定加载Logging配置节,且加载顺序要在添加日志提供器之前:
class Program { static async Task Main() { var builder = new HostBuilder(); builder.ConfigureWebJobs(b => { b.AddAzureStorageCoreServices(); b.AddAzureStorageQueues(); }); builder.ConfigureAppConfiguration((context, configurationBuilder) => { configurationBuilder .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); }); builder.ConfigureLogging((context, b) => { // 明确加载Logging配置节 b.AddConfiguration(context.Configuration.GetSection("Logging")); // 再添加日志提供器 b.AddConsole(); }); var host = builder.Build(); using (host) { await host.RunAsync(); } } }
3. 环境变量配置方式
如果需要通过环境变量设置,使用双下划线表示配置层级:
Logging__LogLevel__Azure.Core=None
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

