Я запутался с различными вариантами настройки (ILogger
против ILoggerFactory
против других вещей).
В моем классе Startup
правильно вызывать AddLogging
(с минимальным уровнем или нет, если он определен где-то здесь или в файле host.json
).
using InjectionHttpClientFactory;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
[assembly: WebJobsStartup(typeof(Startup))]
namespace InjectionHttpClientFactory
{
public sealed class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder webJobsBuilder)
{
webJobsBuilder.Services.AddLogging();
}
}
}
В функции Azure возникает ошибка, если я указываю HttpClient
в качестве параметра:
Microsoft.Extensions.DependencyInjection.Abstractions: Невозможно разрешить службу для типа «Microsoft».Extensions.Logging.ILogger 'при попытке активировать' XXX '
Однако, это работает, если я укажу ILoggerFactory
.Свойство ключа инструментария, которое было пустым, каким-то образом не оказывает никакого влияния.
Я обновил файл host.json
, добавив в него информацию журнала с минимальным уровнем серьезности, а также информацию о конфигурации для Application Insights:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
"default": "Trace"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"maxTelemetryItemsPerSecond" : 5
}
}
}
}
Обновление
Как уже упоминалось в комментариях, Microsoft выпустила обновление , которое вводит класс FunctionsStartup
, который должен быть предпочтительным способом сделать это.
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
builder.Services.AddSingleton((s) => {
return new CosmosClient(Environment.GetEnvironmentVariable("COSMOSDB_CONNECTIONSTRING"));
});
builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();
}
}
}