如何检索特定 Azure Durable Function 运行的日志?

问题描述 投票:0回答:1

我的函数有很多步骤。我做的第一件事就是创建一个数据库记录,在其中存储该特定运行的 context.InstanceId。使用应用程序洞察,我弄清楚了如何进入 TransactionSearch 并使用该实例 id 来查询该运行的具体信息,但我看到的只是各种任务的基本信息,如计划、开始、完成等。如何访问打开 LogStream 并切换到 FileSystemLogs 时看到的日志?在那里我可以看到我的函数正在记录的所有内容,例如调试和信息语句。

我希望能够以某种方式准确提取我打开 LogStream 窗口时会看到的内容。

azure-application-insights azure-durable-functions
1个回答
0
投票

我创建了一个示例 Azure Durable 函数,并且能够将跟踪记录到 Application Insights。

安装以下 NuGet 包

Microsoft.ApplicationInsights
Microsoft.ApplicationInsights.WorkerService

我的

.csproj
文件中的包:

<PackageReference Include="Microsoft.ApplicationInsights" Version="2.21.0" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.15.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.18.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.0.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.13.0" />

AddApplicationInsightsTelemetryWorkerService
中配置
ConfigureServices
,在
AddApplicationInsights
中配置
ConfigureLogging

我的program.cs文件:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

var configuration = new ConfigurationBuilder()
     .SetBasePath(Directory.GetCurrentDirectory())
     .AddJsonFile("local.settings.json", optional: false, reloadOnChange: true)
     .Build();

var Conn = configuration["ApplicationInsights:ConnectionString"];

var host = new HostBuilder()
    .ConfigureServices((hostContext, services) =>
    {
        services.AddApplicationInsightsTelemetryWorkerService(
            options => options.ConnectionString = Conn);
        services.AddLogging();
    
    })
    .ConfigureLogging(logging =>
    {
        logging.AddApplicationInsights();
    })
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();

您可以使用

local.settings.json
host.json
文件来配置 Application Insights。

我的

local.settings.json
文件:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "APPINSIGHTS_INSTRUMENTATIONKEY": "**********
  },

  //configure local.settings.json for app insights 
  "ApplicationInsights": {
    "ConnectionString": "InstrumentationKey=**********;IngestionEndpoint=https://****-2.in.applicationinsights.azure.com/;LiveEndpoint=https://****.livediagnostics.monitor.azure.com/"
  }
}

我的样品

Function1.cs

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.DurableTask;
using Microsoft.DurableTask.Client;
using Microsoft.Extensions.Logging;

namespace FunctionApp2
{
    public static class Function1
    {
        [Function(nameof(Function1))]
        public static async Task<List<string>> RunOrchestrator(
            [OrchestrationTrigger] TaskOrchestrationContext context)
        {
            ILogger logger = context.CreateReplaySafeLogger(nameof(Function1));
            logger.LogInformation("Saying hello.");
            var outputs = new List<string>();
          
            outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "Tokyo"));
            outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "Seattle"));
            outputs.Add(await context.CallActivityAsync<string>(nameof(SayHello), "London"));
       
            return outputs;
        }

        [Function(nameof(SayHello))]
        public static string SayHello([ActivityTrigger] string name, FunctionContext executionContext)
        {
            ILogger logger = executionContext.GetLogger("SayHello");
            logger.LogInformation("Saying hello to {name}.", name);
            return $"Hello {name}!";
        }

        [Function("Function1_HttpStart")]
        public static async Task<HttpResponseData> HttpStart(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
            [DurableClient] DurableTaskClient client,
            FunctionContext executionContext)
        {
            ILogger logger = executionContext.GetLogger("Function1_HttpStart");
          
            string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
                nameof(Function1));

            logger.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);         
            return client.CreateCheckStatusResponse(req, instanceId);
        }
    }
}
  • 将应用程序部署到 Azure Functions。

enter image description here

  • 执行函数 URL。

日志流:

Application Insights 交易搜索中的痕迹:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.