【问题标题】:Application insights not working with startup DI in Azure Functions应用程序洞察不适用于 Azure Functions 中的启动 DI
【发布时间】:2026-01-05 02:55:01
【问题描述】:

我正在尝试将来自 Configure 类的消息记录到 Application Insights。虽然消息已正确记录在 Run 方法中,但在哪里添加 polly,它没有将消息发送到 Appinsights。

//我可以从这里记录消息。

[FunctionName("Function1")]
public async Task Run(string msg,
            ILogger log)
        {
            log.LogInformation("An error occurred.");
}

// 但不是从这里开始。

[assembly: FunctionsStartup(typeof(Startup))]
namespace TestFunc2
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.HTTPExtension();
        }
    }

public static class DependencyExtension
{
    public static IServiceCollection HTTPExtension(this IServiceCollection services)
    {
        services.AddHttpClient<Function1>("client", (provider, client) =>
        {
            var logger = provider.GetService<ILogger<Function1>>();
            logger.LogInformation("func2");
            logger.LogError("func2");
            client.BaseAddress = new Uri("http://www.ggl.com");
            client.DefaultRequestHeaders.Add("Accept", "application/json");
        });

        return services;

    }
}

}

【问题讨论】:

    标签: dependency-injection azure-functions azure-application-insights azure-functions-runtime azure-function-async


    【解决方案1】:

    我现在可以将日志推送到 App Insights。我正在处理 github 问题,Here 它被告知我们需要在 host.json 中添加日志记录作为一种解决方法,以确保它覆盖预定义的配置。

    这是我们需要在host.json中添加的配置

    {
        "version": "2.0",
        "logging": {
            "logLevel": {
                "Default": "Information"
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      昨天是否有人遇到过创建此示例的问题 - 看看是否有帮助:

      https://github.com/Runamok81/AzureFunctionHttpClientFactoryPollyLogging

      要注意的另一件事是,如果您现在生成自己的 ILogger 实例,则需要将其显式添加为 host.json 中的日志类别。我不知道这里是否是这种情况,因为您要求添加一个我认为应该添加的 Function1 实例,但例如在这里我使用字符串“Startup”创建一个:

      https://github.com/jeffhollan/functions-csharp-sqlconnection/blob/b5f1d94e54db96112cbda0257e938e6c887c9310/functions-csharp-sqlconnection/Startup.cs#L19

      所以我必须更新host.json 以确保它包含带有logLevel“信息”的这种类型:

      https://github.com/jeffhollan/functions-csharp-sqlconnection/blob/b5f1d94e54db96112cbda0257e938e6c887c9310/functions-csharp-sqlconnection/host.json#L5

      【讨论】:

      • 我已经尝试了第一个链接,我可以在函数控制台中看到日志,但在 App Insights 中看不到(更新了上下文中的检测密钥)。对我有用的唯一方法是使用记录器工厂 var loggerFactory.AddApplicationInsights(provider, LogLevel.Information);但是 loggerFactory.AddApplicationInsights(provider, LogLevel.Information);根据 MSFT 文档,它已被贬低
      • 在上下文中更新检测密钥是什么意思?您是否尝试手动加载应用程序洞察配置,而不是使用应用程序设置集成?一般来说,对于连接字符串和检测密钥,我们不建议在配置中手动加载,因为可以与我们加载的配置混合
      • 为了测试目的,我做了这个 [var telemetryClient = new TelemetryClient() { InstrumentationKey = "instkey" }; builder.Services.AddSingleton(x => telemetryClient);] 查看它的行为方式。这可行,但这不是推荐的方式,所以我不得不删除它并寻找不同的选项。
      最近更新 更多