3 votes

ILogger ne se connecte pas à Application Insights lors de l'utilisation de fonctions durables Azure Function V2.

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 : enter image description here

Cela montre que ILogger enregistre quelque chose sur le disque : enter image description here

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.

6voto

Peter Bons Points 8574

Le journal d'activité n'est pas l'endroit où vous voulez chercher vos journaux. Les journaux écrits à l'aide de Ilogger sont stockées en tant que Traces dans les perspectives de l'application. Vous pouvez les interroger à l'aide de la fonction Recherche (l'option directement au-dessus de l'option Disponibilité dans votre deuxième capture d'écran)

Le journal d'activité vous montrera les événements concernant l'application insights resource elle-même, et non les données qu'elle contient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X