Конфигурация журнала аналитики приложений игнорируется в функциях Azure v4.net 8. Изолированная функция.C#

Место общения программистов C#
Ответить
Anonymous
 Конфигурация журнала аналитики приложений игнорируется в функциях Azure v4.net 8. Изолированная функция.

Сообщение Anonymous »

Я пишу функции Azure в dotnet 8, используя версию 4, изолированную от сети.
При развертывании в Azure я хочу регистрировать пользовательские сообщения трассировки на уровне «Отладка» и выше для анализа приложений.
При локальной отладке я хочу видеть все свои пользовательские журналы на уровне «Трассировка» и выше.
Мне также хотелось бы, чтобы уровень развернутого журнала можно было изменить с помощью конфигурации, чтобы однажды функция уже развернута, ее можно легко изменить на «Информация», а затем «Предупреждение».
Я включу свой код ниже, но вот краткое изложение того, что я сделал на данный момент:
  • Установите уровень журнала для «функции» в файле host.json на «Отладка».
  • Отключена выборка.
  • Удален фильтр «Предупреждение» по умолчанию в Program.cs.
  • Вызывается SetMinimumLevel(LogLevel.Trace) в Program.cs.
  • В файле local.settings.json я установил «AzureFunctionsJobHost__logging__logLevel__function»: «Trace», чтобы включить локальные сообщения трассировки.
Все это работает очень хорошо хорошо при локальном запуске. Я получаю сообщения трассировки, поступающие в консоль. Я могу изменить значение в local.settings.json, и журналы будут фильтроваться, как и ожидалось. Я могу удалить запись локальных настроек, а затем получить локальную отладку и выше, а также изменить уровень в host.json, и журналы фильтруются, как ожидалось.
Это становится проблемой, когда я на самом деле опубликовать в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»