我正在开发带有 Polly 重试和断路器的 Azure Function App .net core 3.1。到目前为止,我使用构建器将详细信息记录到 App Insights 没有问题,因为它在执行如下所示之前不会被初始化
private static void AddPoliciesAsync(this IHttpClientBuilder builder)
{
builder.AddPolicyHandler((service, request) =>
GetRetryAsyncPolicy(service.GetService<ILogger<HTTPTrigger1>>()).WrapAsync(
GetCircuitBreakerAsyncPolicy(service.GetService<ILogger<HTTPTrigger1>>())));
}
其中 HTTPTrigger1 是用于测试的函数应用名称。现在我需要扩展现有的功能来检查电路是否损坏,以便我可以运行另一组业务功能。对于这里提到的https://github.com/App-vNext/Polly#circuit-breaker,我添加了 CB 的单例实例以确保正在读取断路器状态。
var logger = services.BuildServiceProvider().GetService<ILogger<HTTPTrigger1>>();
var circuitBreaker = GetCircuitBreakerAsyncPolicy(logger);
services.AddSingleton(circuitBreaker as ICircuitBreakerPolicy<HttpResponseMessage>);
services.AddHttpClient("name", client =>
{
// something
})
.AddPollyPolicies(logger, circuitBreaker);
但是在第二个实现中获取记录器实例时出现错误。正如我在 MS 文档中检查的那样https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#caveats说不要在启动期间记录消息,即使我正在创建例如,它仍然会引发错误(后续调用所需的实习生)。无论如何我可以在这里实现日志记录吗?