Application Insights 在发布时不会从 Azure Functions 捕获日志

Application Insights does not capture logs from Azure Function when published

我有以下 Azure 函数:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using System.Threading.Tasks;
    
internal class ExpServiceFuncApp
{

    [FunctionName("ExpServiceFuncApp")]
    public static void Run([TimerTrigger("0 */10 * * * *")] TimerInfo myTimer, ILogger log)
    {
        //using var channel = new InMemoryChannel();

        try
        {
            IServiceCollection services = new ServiceCollection();
            //services.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);

            //services.AddLogging(builder =>
            //{
            //    builder.AddApplicationInsights(KeyVaultConfig.GetSecretValue("InstrumentationKey"));
            //})

                services.AddSingleton<IDataRec, DataRec.DataRec>()
                .AddSingleton<IDataProc, DataProc.DataProc>()
                .AddSingleton<IDClient, KustoDClient>()
                .AddSingleton<IAzureBlobClient, AzureBlobClient>()
                .AddSingleton<IAzureKustoClient, AzureKustoClient>()
                .AddSingleton<IQueriesSettings, QueriesSettings>()
                .AddSingleton<IServiceSettings, ServiceSettings>()
                .AddTransient<IRawData, RawData>();

                IServiceProvider serviceProvider = services.BuildServiceProvider();

                var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
                ILogger logger = loggerFactory.CreateLogger<ExportServiceFunctionApp>();

                logger?.LogInformation("Initiate.");
                var dataProc = serviceProvider.GetRequiredService<IDataProc>();

                logger?.LogInformation("Start Data Process.");
                dataProc.Start();

                Console.ReadLine();

                log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
            }
            catch (Exception ex)
            {

            }

        //finally
        //{
        //    channel.Flush();

        //    Task.Delay(5000).Wait();
        //}
    }
}

正如你在这里看到的,我在这个 class 中有一些日志信息,我还有其他日志正在被注入到其他 classes 中。此外,我将机密存储在 Azure Key Vault 中。这里的问题是,当我将应用程序发布到 azure 时,application insights 没有跟踪任何这些日志 (代码中提到的 log.Information 或 log.Debug).正如您还看到的,我评论了一些行,我认为这些行可能有助于跟踪 ApplicationInsights 上的日志,但仍然没有成功。我在 Application Insights 上收到的内容如下:

enter image description here

host.json如下:

{
    "version": "2.0",
    "logging": {
      "applicationInsights": {
        "samplingSettings": {
          "isEnabled": true,
          "excludedTypes": "Request"
        },
        "logLevel": {
          "Default": "Information",
          "Microsoft": "Error"
        }
      }
    }
}

我真的不知道代码中是否缺少或错误。老实说,我不知道触发器是否只是 运行ning 本身,而不是每 10 分钟内执行一次代码。我真的尝试了几种方法来跟踪这些日志,但仍然不起作用。任何人都可以为我提供解决这个问题的方法吗? 请注意,当我 运行 程序作为控制台应用程序并在控制台上显示结果时,一切正常。 所以我现在从上面的代码中猜测问题是如何将应用程序洞察力与 Azure 函数集成。

感谢@Peter Bons 的评论。

使用以下代码段修改您的配置

{
  "ApplicationInsights": {
    "InstrumentationKey": "my-instrumentation-key",
    "EnableAdaptiveSampling": false,
    "EnablePerformanceCounterCollectionModule": false
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}