在 Startup 中创建 ILogger 实例
Create ILogger instance in Startup
我正在使用 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 说在启动期间不要记录消息,即使正在创建实例,它仍然会抛出错误(后续调用需要哪些实习生)。无论如何我可以在这里实现日志记录吗?
为什么不直接使用 AddSingleton
工厂重载?
services.AddSingleton(sp => {
var logger = sp.GetService<ILogger<HTTPTrigger1>>();
var circuitBreaker = GetCircuitBreakerAsyncPolicy(logger);
return circuitBreaker as ICircuitBreakerPolicy<HttpResponseMessage>;
});
我正在使用 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 说在启动期间不要记录消息,即使正在创建实例,它仍然会抛出错误(后续调用需要哪些实习生)。无论如何我可以在这里实现日志记录吗?
为什么不直接使用 AddSingleton
工厂重载?
services.AddSingleton(sp => {
var logger = sp.GetService<ILogger<HTTPTrigger1>>();
var circuitBreaker = GetCircuitBreakerAsyncPolicy(logger);
return circuitBreaker as ICircuitBreakerPolicy<HttpResponseMessage>;
});