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

如何禁用Durable Functions的Verbose日志?host.json与Serilog配置无效

Durable Functions中如何禁用Application Insights的Verbose和Info级别日志?

日志输出

Application Insights日志输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:10:33