Я использую функцию Durable Azure в прототипе для будущего проекта.
По сути, у меня есть функция Client Azure, запускаемая по запросу HTTP POST
, который запускает Orchestrator.Затем оркестр решает активировать действие.Ничего сложного.
Вот пример того, что я делаю:
[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 и Client получают ILogger
, но не функцию Activity;как указано в документации (либо конкретный параметр, либо экземпляр DurableActivityContext
), функция Activity получает только один параметр.И у меня нет впечатления, что статический класс, в котором объявлены эти методы, может хранить ссылку на это ILogger
.
Я понимаю, что функция Activity должна выполнять одну небольшую работу, но мне было бы удобнееесли я смог записать, что действие было вызвано с соответствующими значениями, если что-то пойдет не так (и это будет :)).
Вопрос
Как может действиеполучить доступ к ILogger
?