Azure Functions隔离运行时日志噪音过滤方法咨询
解决隔离运行时Azure Function中Serilog过滤Microsoft.AspNetCore日志噪音的问题
在隔离运行时的Azure Function中,当使用Serilog作为日志提供器时,host.json中的日志级别配置不会直接作用于Serilog——因为Serilog拥有独立的过滤规则体系,需要在Serilog自身的配置中添加过滤逻辑。以下是具体的解决方案:
方法1:通过代码配置Serilog过滤规则
在初始化Serilog的LoggerConfiguration时,直接添加针对特定命名空间/类的日志级别覆盖或排除规则:
var loggingConfiguration = new LoggerConfiguration() .MinimumLevel.Debug() // 覆盖整个Microsoft.AspNetCore命名空间的日志级别为None .MinimumLevel.Override("Microsoft.AspNetCore", Serilog.Events.LogEventLevel.None) // 或者更精准地过滤指定类 .Filter.ByExcluding(logEvent => logEvent.Properties.TryGetValue("SourceContext", out var sourceContext) && (sourceContext.ToString().Contains("Microsoft.AspNetCore.Hosting.Diagnostics") || sourceContext.ToString().Contains("Microsoft.AspNetCore.Routing.EndpointMiddleware"))) .ReadFrom.Configuration(configuration);
方法2:通过appsettings.json配置Serilog过滤规则
直接在appsettings.json的Serilog节点中添加MinimumLevel.Override配置,无需修改代码:
"Serilog": { "Using": [ "Serilog.Sinks.AzureAnalytics", "Serilog.Sinks.Console" ], "MinimumLevel": { "Default": "Information", "Override": { // 全局覆盖Microsoft.AspNetCore命名空间 "Microsoft.AspNetCore": "None", // 精准覆盖指定类 "Microsoft.AspNetCore.Hosting.Diagnostics": "None", "Microsoft.AspNetCore.Routing.EndpointMiddleware": "None" } }, "WriteTo": [ { "Name": "AzureAnalytics", "Args": { "logName": "<Redacted>", "workspaceId": "<Redacted>", "authenticationId": "<Redacted>" } }, { "Name": "Console", "Args": { "logName": "<Redacted>" } } ], "Enrich": [ "AppName" ], "Properties": { "AppName": "<Redacted>" } }
关键说明
host.json中的logging.LogLevel配置仅对Azure Functions宿主默认的日志提供器生效,当通过logBuilder.AddSerilog()将Serilog设置为日志提供器后,Serilog会忽略该配置,转而使用自身的过滤规则。- 若需要同时保留部分Microsoft.AspNetCore下的日志(如错误级别),可将
None替换为Error等具体级别,灵活调整过滤粒度。
内容的提问来源于stack exchange,提问作者elliot-j
相关产品推荐
相关产品推荐

