如何从活动函数获取ILogger?

时间:2019-02-08 18:43:45

标签: c# azure azure-functions azure-durable-functions

我在未来项目的原型中使用了耐用的Azure函数。

基本上,我具有由启动Orchestrator的HTTP POST请求触发的Client Azure功能。然后,协调器决定触发活动。没什么复杂的。

以下是我正在做的事情的一个示例:

[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?
}

协调器和客户端功能都被赋予ILogger,而活动功能则不被赋予;与stated中的documentation(特定参数或DurableActivityContext实例)一样,Activity函数仅获得一个参数。而且我不认为声明这些方法的静态类可以在该ILogger上保留引用。

我知道Activity Function应该执行一项小任务,但是如果出现问题(如果出现问题,它将以适当的值进行记录)的话,我会感到更加自在(它将:))。

问题

活动如何访问ILogger

1 个答案:

答案 0 :(得分:1)

  

不可能将多个参数直接传递给活动函数。在这种情况下,建议是传入对象数组或在.NET中使用ValueTuples对象。

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