Dependency injection Application insights无法在Azure函数中使用启动DI

Dependency injection Application insights无法在Azure函数中使用启动DI,dependency-injection,azure-functions,azure-application-insights,azure-functions-runtime,azure-function-async,Dependency Injection,Azure Functions,Azure Application Insights,Azure Functions Runtime,Azure Function Async,我正在尝试将消息从Configure类记录到Application Insights。虽然消息被正确地记录在Run方法中,但是在我添加polly的地方,它不会将消息发送到Appinsights //我可以从这里记录消息 [FunctionName("Function1")] public async Task Run(string msg, ILogger log) { log.LogInformation("An error oc

我正在尝试将消息从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;

    }
}

}
//但不是从这里

[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;

    }
}

}
[程序集:函数启动(类型(启动))]
命名空间TestFunc2
{
公共类启动:函数启动
{
公共覆盖无效配置(IFunctionsHostBuilder)
{
builder.Services.HTTPExtension();
}
}
公共静态类DependencyExtension
{
公共静态IServiceCollection HTTPExtension(此IServiceCollection服务)
{
services.AddHttpClient(“客户机”,(提供商,客户机)=>
{
var logger=provider.GetService();
logger.LogInformation(“func2”);
logger.LogError(“func2”);
client.BaseAddress=新Uri(“http://www.ggl.com");
client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
});
返回服务;
}
}
}

昨天有人遇到了创建此示例的人-看看这是否有帮助:

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

因此,我必须更新
host.json
,以确保它包含带有日志级别“信息”的类型:


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

下面是我们需要添加到host.json中的配置

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

我已经尝试了第一个链接,我能够在功能控制台中看到日志,但在应用程序洞察中看不到日志(在上下文中更新了instrumentation键)。对我来说唯一有效的方法是使用logger factory var loggerFactory.AddApplicationInsights(provider,LogLevel.Information);但是loggerFactory.AddApplicationInsights(provider,LogLevel.Information);根据MSFT文档,它是去润滑的。当您说您在上下文中更新检测键时,您的意思是什么?您是否试图手动加载app insights配置,而不是使用应用程序设置集成?一般来说,对于连接字符串和检测键,我们不建议在配置中手动加载,因为它可以与加载的配置混合使用。出于测试目的,我这样做[var telemetryClient=new telemetryClient(){InstrumentationKey=“instkey”};builder.Services.AddSingleton(x=>telemetryClient);]来查看它的行为。这是可行的,但这不是推荐的方法,所以我不得不删除它,并寻找不同的选择。