如何从 Activity 函数获取 ILogger?

How to get an ILogger from an Activity Function?

我在未来项目的原型中使用 Durable Azure Functions。

基本上,我有一个由启动 Orchestrator 的 HTTP POST 请求触发的客户端 Azure 函数。然后,Orchestrator 决定触发 Activity。没什么复杂的。

这是我正在做的一个示例:

[FunctionName("ClientFunction")]
public static async Task<HttpResponseMessage> OnHttpTriggerAsync([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestMessage request, [OrchestrationClient] DurableOrchestrationClient starter, ILogger logger)
{
    // Triggers the orchestrator.
    string instanceId = await starter.StartNewAsync("OrchestratorFunction", null);

    return new HttpResponseMessage(HttpStatusCode.OK);
}


[FunctionName("OrchestratorFunction")]
public static async Task DoOrchestrationThingsAsync([OrchestrationTrigger] DurableOrchestrationContext context, ILogger logger)
{
    // Triggers some serious activity.
    await context.CallActivityAsync("ActivityFunction", null);
}

[FunctionName("ActivityFunction")]
public static Task DoAnAwesomeActivity([ActivityTrigger] DurableActivityContext context)
{
    // Short & Sweet activity...
    // Wait... Where's my logger?
}

Orchestrator 和客户端函数都被赋予了 ILogger 而不是 Activity 函数;作为 stated in the documentation(特定参数或 DurableActivityContext 实例),Activity 函数仅获取一个参数。而且我并不认为声明这些方法的静态 class 可以保留对 ILogger.

的引用

我知道 Activity 函数应该执行一项小工作,但如果我能够记录在出现问题时使用适当的值调用 activity 我会更舒服(它会 :)).

问题

Activity 如何访问 ILogger

It is not possible to pass multiple parameters to an activity function directly. The recommendation in this case is to pass in an array of objects or to use ValueTuples objects in .NET.

这个restriction你关心的是说我们从Orchestrator传给Activity函数的参数。这并不意味着我们只能在 Activity 方法签名中使用一个参数。随时在此处添加 ILogger 并根据需要完成您的工作。