Quelqu'un peut-il m'expliquer comment forcer ILogger à enregistrer quelque chose dans Application insights lorsqu'on utilise Azure Function V2 (.net Core) ?
Nous avons configuré Application Insights et il montre en direct le télémentry et les exceptions non gérées. Ce que nous essayons de faire fonctionner est de forcer Application Insights à stocker les journaux que nous créons via l'ILogger par défaut.
Quel que soit le type de logLevel utilisé (Information, Warning, Error, Critical), rien n'est stocké dans Application insights.
J'ai également essayé de créer 500 messages de journal dans l'espoir qu'ils puissent être transmis aux aperçus d'application sous forme de lot.
Est-ce que je rate quelque chose d'évident ici ? Quelqu'un peut-il suggérer comment utiliser l'ILogger par défaut pour qu'il transmette quelque chose à l'Application Insights associé à la fonction Azure App V2 (.net core) ?
hôte.json
{
"version": "2.0",
"functionTimeout": "00:10:00",
"extensions": {
"durableTask": {
"maxConcurrentActivityFunctions": 4,
"maxConcurrentOrchestratorFunctions": 1
}
},
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
"default": "Information"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"maxTelemetryItemsPerSecond": 5
}
}
}
}
Azure Function V2, TimerTrigger, DurableOrchestrationClient :
[FunctionName("MainTriggerEntry")]
public static async Task RunMainTriggerEntry([TimerTrigger("%CRON_EXPRESSION%", RunOnStartup = false)]TimerInfo timer,
[OrchestrationClient]DurableOrchestrationClient starter, ILogger log)
{
log.LogInformation("[Information] Message!");
log.LogError("[Error]. Something occured");
log.LogCritical("[Critical] Critical issue");
for (var i = 0; i < 500; i++)
{
log.LogWarning($"[Warning] Logging to Application insights. {i}");
}
// We don't want more than one orchestrator running at the same time:
var orchestrationStatus = await starter.GetStatusAsync(OrchestratorInstanceGuid);
if (orchestrationStatus == null || !orchestrationStatus.IsBusy())
{
var instanceId = await starter.StartNewAsync(OrchestratorFunctionName, OrchestratorInstanceGuid, null);
log.LogInformation($"Triggering {OrchestratorFunctionName} function with an ID '{instanceId}'.");
}
else
{
log.LogInformation($"{OrchestratorFunctionName} function with an ID '{OrchestratorInstanceGuid}' is already running.");
}
}
Rien n'apparaît dans les aperçus d'application que nous avons enregistrés. Mais les échecs apparaissent comme ils le devraient :
Cela montre que ILogger enregistre quelque chose sur le disque :
Plus d'informations :
- Paquet Nuget Microsoft.NET.SDK.Functions v1.0.26
- La fonction Azure v2 est connectée à l'Apllication insights via APPINSIGHTS_INSTRUMENTATIONKEY.
- L'aperçu des applications montre la télémétrie en direct et les exceptions.
- Application insights montre des données, mais pas celles d'ILogger.