如何禁用Durable Functions的Verbose日志?host.json与Serilog配置无效
Durable Functions中如何禁用Application Insights的Verbose和Info级别日志?
日志输出

DI配置
使用了依赖注入(DI),仅引入自定义类,未对日志做特殊配置。
host.json配置
原配置如下(存在语法错误):
{ "version": "2.0", "logging": { "logLevel": { "default": "Warning", "DurableTask.AzureStorage": "Warning", "DurableTask.Core": "Warning", "Host.Triggers.DurableTask": "Warning", "Function": "Warning", }, "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Exception" } } } }
配置未生效,所有Verbose/Info日志仍推送到日志流。
Serilog配置
尝试用Serilog处理日志,代码如下,但问题依旧:
[assembly: FunctionsStartup(typeof(MultiHop.Functions.Startup))] namespace MultiHop.Functions { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Warning() .MinimumLevel.Override("Host.Triggers.DurableTask", LogEventLevel.Warning) .MinimumLevel.Override("DurableTask.Core", LogEventLevel.Warning) .MinimumLevel.Override("DurableTask.AzureStorage", LogEventLevel.Warning) .MinimumLevel.Override("Function", LogEventLevel.Warning) .Enrich.FromLogContext() .Enrich.WithExceptionDetails() .WriteTo.Console(LogEventLevel.Warning, theme: SystemConsoleTheme.Literate) .CreateLogger(); builder.Services.AddLogging(configure => configure.AddSerilog(Log.Logger, true)); } } }
解决方案
1. 修复host.json语法错误
原配置中"Function": "Warning",末尾的多余逗号会导致配置文件解析失败,直接忽略整个logging节点。先移除该逗号:
{ "version": "2.0", "logging": { "logLevel": { "default": "Warning", "DurableTask.AzureStorage": "Warning", "DurableTask.Core": "Warning", "Host.Triggers.DurableTask": "Warning", "Function": "Warning" }, "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Exception" } } } }
2. 单独配置Application Insights的日志级别
根节点的logLevel不会直接覆盖Application Insights的日志收集规则,需要在applicationInsights节点下单独添加logLevel配置:
{ "version": "2.0", "logging": { "logLevel": { "default": "Warning", "DurableTask.*": "Warning", "Host.Triggers.DurableTask": "Warning", "Function": "Warning" }, "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Exception" }, "logLevel": { "default": "Warning", "DurableTask.*": "Warning", "Host.Triggers.DurableTask": "Warning", "Function": "Warning" } } } }
用DurableTask.*通配符覆盖所有DurableTask相关命名空间,简化配置。
3. 调整Serilog配置(避免双重日志)
如果坚持用Serilog,需要先移除默认的Application Insights日志提供器,避免系统默认日志和Serilog日志重复推送,同时添加Serilog的Application Insights sink:
[assembly: FunctionsStartup(typeof(MultiHop.Functions.Startup))] namespace MultiHop.Functions { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { // 移除默认的Application Insights日志提供器 var aiLoggerDescriptor = builder.Services.FirstOrDefault(d => d.ServiceType == typeof(ILoggerProvider) && d.ImplementationType?.Name.Contains("ApplicationInsightsLoggerProvider") == true); if (aiLoggerDescriptor != null) { builder.Services.Remove(aiLoggerDescriptor); } Log.Logger = new LoggerConfiguration() .MinimumLevel.Warning() .MinimumLevel.Override("DurableTask.*", LogEventLevel.Warning) .MinimumLevel.Override("Host.Triggers.DurableTask", LogEventLevel.Warning) .MinimumLevel.Override("Function", LogEventLevel.Warning) .Enrich.FromLogContext() .Enrich.WithExceptionDetails() .WriteTo.Console(LogEventLevel.Warning, theme: SystemConsoleTheme.Literate) // 添加Serilog的Application Insights输出 .WriteTo.ApplicationInsights(TelemetryConfiguration.CreateDefault(), TelemetryConverter.Traces) .CreateLogger(); builder.Services.AddLogging(configure => configure.AddSerilog(Log.Logger, true)); } } }
注意需要安装Serilog.Sinks.ApplicationInsights NuGet包。
4. 验证函数运行时版本
确保你的函数应用运行在v3或v4版本,v2版本的日志配置逻辑有差异,可能导致配置不生效。可以在Azure门户的函数应用配置页面查看运行时版本。
5. 调整采样设置(可选)
如果日志仍然过多,可以限制采样仅保留Warning及以上级别:
"samplingSettings": { "isEnabled": true, "excludedTypes": "Exception", "includedTypes": "Warning,Error,Critical" }
内容的提问来源于stack exchange,提问作者Reggi
相关产品推荐
相关产品推荐

