При развертывании в Azure я хочу регистрировать пользовательские сообщения трассировки на уровне «Отладка» и выше для анализа приложений.
При локальной отладке я хочу видеть все свои пользовательские журналы на уровне «Трассировка» и выше.
Мне также хотелось бы, чтобы уровень развернутого журнала можно было изменить с помощью конфигурации, чтобы однажды функция уже развернута, ее можно легко изменить на «Информация», а затем «Предупреждение».
Я включу свой код ниже, но вот краткое изложение того, что я сделал на данный момент:
- Установите уровень журнала для «функции» в файле host.json на «Отладка».
- Отключена выборка.
- Удален фильтр «Предупреждение» по умолчанию в Program.cs.
- Вызывается SetMinimumLevel(LogLevel.Trace) в Program.cs.
- В файле local.settings.json я установил «AzureFunctionsJobHost__logging__logLevel__function»: «Trace», чтобы включить локальные сообщения трассировки.
Это становится проблемой, когда я на самом деле опубликовать в Azure. В Azure я всегда получаю все журналы, включая трассировку. Добавление AzureFunctionsJobHost__logging__logLevel__function не имеет никакого эффекта, равно как и изменение значений журнала в host.json. В файле host.json с уровнем журнала «Ошибка» значение Trace по-прежнему регистрируется как критическое в аналитике приложений.
Я проверил файл host.json, развернут правильный файл.
Единственное, что влияет на уровни журнала после развертывания, — это logger.SetMinimumLevel(). Развернутый код в Azure всегда регистрируется на этом уровне и выше.
Почему?
host.json
{
"version": "2.0",
"logging": {
"logLevel": {
"function": "Debug"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": false,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
}
}
Program.cs
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services => {
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.ConfigureLogging(logging =>
{
logging.SetMinimumLevel(LogLevel.Trace); //this controls the minimum log level allowed in config (you still need to set in config, usually to Information)
logging.Services.Configure(options =>
{
LoggerFilterRule? defaultRule = options.Rules.FirstOrDefault(rule => rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (defaultRule is not null)
{
options.Rules.Remove(defaultRule);
}
});
})
.Build();
host.Run();
функция
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
namespace Basl
{
public class TestLogging
{
private readonly ILogger _logger;
public TestLogging(ILogger logger)
{
_logger = logger;
}
[Function("TestLogging")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogTrace("This is a TRACE log message");
_logger.LogDebug("This is a DEBUG log message");
_logger.LogInformation("This is a INFORMATION log message");
_logger.LogWarning("This is a WARNING log message");
_logger.LogError("This is a ERROR log message");
_logger.LogCritical("This is a CRITICAL log message");
return new OkObjectResult($"Log Messages tested at {DateTime.UtcNow.ToString()}");
}
}
}
файл проекта csproj
net8.0
v4
Exe
enable
enable
PreserveNewest
PreserveNewest
Never
Подробнее здесь: https://stackoverflow.com/questions/786 ... s-v4-net-8
Мобильная версия