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

.NET 7 Azure Function中ITelemetryInitializer无法添加日志自定义属性

解决Azure Functions隔离进程模型中Application Insights自定义全局属性不生效的问题

问题分析

你当前使用的是隔离进程模型的Azure Functions(由ConfigureFunctionsWorkerDefaults标识),这种模型下传统的ITelemetryInitializer注册逻辑需要调整,同时你的包引用存在冗余,这些都是导致自定义属性未生效的核心原因。

修复步骤

1. 清理冗余包引用

移除不需要的ASP.NET Core和基础Application Insights包,仅保留Worker Service专用包:

<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0"/>
<!-- 移除Microsoft.ApplicationInsights和Microsoft.ApplicationInsights.AspNetCore -->

2. 调整Program.cs中的服务注册逻辑

确保正确启用Application Insights Worker Service,并注册自定义初始化器,同时配置日志关联:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices((hostContext, services) =>
    {
        // 启用Application Insights Worker Service核心功能
        services.AddApplicationInsightsTelemetryWorkerService();
        // 注册自定义Telemetry初始化器
        services.AddSingleton<ITelemetryInitializer, CustomTelemetry>();
        // 确保Application Insights日志接收器生效
        services.Configure<LoggerFilterOptions>(options =>
        {
            var aiLoggerRule = options.Rules.FirstOrDefault(r => 
                r.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
            if (aiLoggerRule != null)
            {
                aiLoggerRule.LogLevel = LogLevel.Information; // 根据需求调整日志级别
            }
        });
    })
    .Build();

host.Run();

3. 完善自定义Telemetry初始化器

添加属性存在性检查,避免重复添加报错:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

public class CustomTelemetry : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        if (!telemetry.Context.GlobalProperties.ContainsKey("GlobalProperties"))
        {
            telemetry.Context.GlobalProperties["GlobalProperties"] = "test";
        }
    }
}

4. 验证日志输出方式

确保函数中使用ILogger进行日志记录(而非直接操作TelemetryClient):

public class SampleFunction
{
    private readonly ILogger<SampleFunction> _logger;

    public SampleFunction(ILogger<SampleFunction> logger)
    {
        _logger = logger;
    }

    [Function("SampleFunction")]
    public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
    {
        _logger.LogInformation("Function executed successfully");
        return new OkObjectResult("Completed");
    }
}

验证方式

在Application Insights的日志查询中,通过customDimensions.GlobalProperties即可查看自定义属性值,例如:

traces
| where customDimensions.GlobalProperties == "test"

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:14