У нас возникли некоторые проблемы с журналированием после обновления одной из наших функций Azure (v4) до .NET 8 и изолированного рабочего процесса; Некоторые (не все) журналы уровня ошибок отображаются только в потоке журнала функций для «Журналов App Insights», а не в журналах трассировки Application Insights.
Обратите внимание, что выборка отключена (или должна быть отключена), см. Приложение-функция Azure не всегда отправляет журнал в аналитику приложения.
При локальном запуске приложения и подключении его к Application Insights все журналы отображаются при запросе трассировок.
Программа.cs:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
// Other service configurations not included
services.ConfigureFunctionsApplicationInsights();
services.AddApplicationInsightsTelemetryWorkerService();
})
.ConfigureLogging(logging =>
{
logging.Services.Configure<LoggerFilterOptions>(options =>
{
var defaultRule = options.Rules.FirstOrDefault(rule =>
rule.ProviderName == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (defaultRule is not null)
{
options.Rules.Remove(defaultRule);
}
});
})
.Build();
host.Run();
хост.json:
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Warning",
"Function": "Information",
"<project-namespace>": "Information"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": false
}
}
}
}
Изменить — добавлены снимки экрана потока журналов и журналов статистики приложений.
Некоторые (не все) журналы уровня ошибок отображаются только в потоке журнала функций для «Журналов App Insights», а не в журналах трассировки Application Insights.
Используя триггерную функцию Http со стеком среды выполнения .NET 8.0, можно изолировать получение всех типов журналов, включая журналы ошибок в аналитике приложений. проверьте приведенный ниже код и конфигурацию:
Код функции:
public class Function1
{
private readonly ILogger<Function1> _logger;
public Function1(ILogger<Function1> logger)
{
_logger = logger;
}
[Function("Function1")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogTrace("this is Trace log");
_logger.LogDebug("this is Debug log");
_logger.LogWarning("this is Warning log");
_logger.LogError("this is Error log");
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
}
.cs проект:
<FrameworkReference Include = "Microsoft.AspNetCore.App" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker" Version = "1.21.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http" Version = "3.1.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version = "1.2.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Sdk" Version = "1.17.0" />
<PackageReference Include = "Microsoft.ApplicationInsights.WorkerService" Version = "2.22.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.ApplicationInsights" Version = "1.2.0" />
Программа.cs:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
services.Configure<LoggerFilterOptions>(options =>
{
LoggerFilterRule toRemove = options.Rules.FirstOrDefault(rule => rule.ProviderName
== "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");
if (toRemove is not null)
{
options.Rules.Remove(toRemove);
}
});
})
.ConfigureAppConfiguration((hostContext, config) =>
{
config.AddJsonFile("host.json", optional: true);
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddApplicationInsights(console =>
{
console.IncludeScopes = true;
});
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
})
.Build();
host.Run();
хозяин. json:
{
"version": "2.0",
"logging": {
"logLevel": {
"default": "Trace"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
},
"enableLiveMetricsFilters": true
}
}
}
Функция успешно выполнена в локальном режиме.
Выход:
Похоже, что Application Insights теперь (после обновления) улавливает ошибку как исключение, а не как трассировку — вероятно, поскольку одно из пользовательских измерений содержит исключение.
Спасибо @Pavan за то, что заставил меня проверить поиск транзакций!
Журнал просто скрывался как «Исключение» вместо журнала «Трассировка» :) Спасибо, что заставили меня проверить поиск транзакций!