Journalisation avec le SDK Azure pour .NET
Les bibliothèques clientes du SDK Azure pour .NET incluent la possibilité de journaliser les opérations de bibliothèque cliente. Cette journalisation vous permet de surveiller les demandes d’E/S et les réponses que les bibliothèques clientes effectuent aux services Azure. En règle générale, les journaux sont utilisés pour déboguer ou diagnostiquer les problèmes de communication. Cet article décrit les approches suivantes pour activer la journalisation avec le SDK Azure pour .NET :
- Activer la journalisation avec les méthodes intégrées
- Configurer la journalisation personnalisée
- Mappage sur la journalisation ASP.NET Core
Important
Cet article s’applique aux bibliothèques de client qui utilisent les versions les plus récentes du kit SDK Azure pour .NET. Pour voir si une bibliothèque est prise en charge, consultez la liste des dernières versions d’Azure SDK. Si votre application utilise une version antérieure d’une bibliothèque de client Azure SDK, consultez les instructions spécifiques dans la documentation de service applicable.
Enregistrement d’informations
Le SDK journalise chaque requête et chaque réponse HTTP, en assainissant les valeurs d’en-tête et de requête des paramètres pour supprimer les données personnelles.
Entrée du journal des requêtes HTTP :
- ID unique
- HTTP method
- URI
- En-têtes de requête sortants
Entrée de journal des réponses HTTP :
- Durée de l’opération d’E/S (temps écoulé)
- ID de la demande
- Code d’état HTTP
- Expression de motif HTTP
- En-têtes de réponse
- Informations sur l’erreur, le cas échéant
Contenu de la requête et de la réponse HTTP :
Flux de contenu sous forme de texte ou d’octets en fonction de l’en-tête
Content-Type
.Notes
Le journal de contenu est désactivé par défaut. Pour l’activer, consultez Consigner les corps de requête et de réponse HTTP. Cette fonctionnalité s’applique uniquement aux bibliothèques utilisant HTTP pour communiquer avec un service Azure. Les bibliothèques basées sur d’autres protocoles, comme AMQP, ne prennent pas en charge la journalisation du contenu. Les exemples non pris en charge sont notamment les bibliothèques pour les services Azure comme Event Hubs, Service Bus et Web PubSub.
Les journaux d’événements sont généralement générés à l’un des trois niveaux suivants :
- Informations sur les événements de demande et de réponse
- Avertissement en cas d’erreurs
- Commentaires pour la journalisation détaillée des messages et du contenu
Activer la journalisation avec les méthodes intégrées
Les bibliothèques clientes du SDK Azure pour .NET consignent les événements dans le suivi d’événements pour Windows (ETW) via la classe System.Diagnostics.Tracing.EventSource, ce qui est typique pour .NET. Les sources d’événements vous permettent d’utiliser la journalisation structurée dans votre application avec une surcharge de performances minimale. Pour accéder aux journaux des événements, vous devez inscrire des écouteurs d’événements.
Le SDK inclut la classe Azure.Core.Diagnostics.AzureEventSourceListener, qui contient deux méthodes statiques qui simplifient la journalisation complète pour votre application .NET : CreateConsoleLogger
et CreateTraceLogger
. Chacune de ces méthodes accepte un paramètre facultatif qui spécifie un niveau de journalisation. Si le paramètre n’est pas fourni, le niveau de journal par défaut de Informational
est utilisé.
Se connecter à la fenêtre de console
L’un des principes fondamentaux des bibliothèques clientes du SDK Azure pour .NET consiste à simplifier la possibilité d’afficher des journaux complets en temps réel. La méthode CreateConsoleLogger
vous permet d’envoyer des journaux à la fenêtre de console avec une seule ligne de code :
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateConsoleLogger();
Journaliser les traces de diagnostic
Si vous implémentez des écouteurs de trace, vous pouvez utiliser la méthode CreateTraceLogger
pour journaliser le mécanisme de suivi d’événements .NET standard (System.Diagnostics.Tracing). Pour plus d’informations sur le suivi d’événements dans .NET, consultez Écouteurs de trace.
Cet exemple spécifie un niveau de journalisation détaillé :
using AzureEventSourceListener listener =
AzureEventSourceListener.CreateTraceLogger(EventLevel.Verbose);
Configurer la journalisation personnalisée
Comme mentionné ci-dessus, vous devez inscrire des écouteurs d’événements pour recevoir des messages de journal du SDK Azure pour .NET. Si vous ne souhaitez pas implémenter la journalisation complète à l’aide de l’une des méthodes simplifiées ci-dessus, vous pouvez construire une instance de la classe AzureEventSourceListener
. Transmettez à cette instance une méthode de rappel que vous écrivez. Cette méthode recevra des messages de journal que vous pouvez traiter comme vous le souhaitez. En outre, lorsque vous construisez l’instance, vous pouvez spécifier les niveaux de journal à inclure.
L’exemple suivant crée un écouteur d’événements qui journalise dans la console avec un message personnalisé. Les journaux sont filtrés sur les événements émis à partir de la bibliothèque cliente Azure Core avec un niveau détaillé. La bibliothèque Azure Core utilise un nom de source d’événement de Azure-Core
.
using Azure.Core.Diagnostics;
using System.Diagnostics.Tracing;
// code omitted for brevity
using var listener = new AzureEventSourceListener((e, message) =>
{
// Only log messages from "Azure-Core" event source
if (e.EventSource.Name == "Azure-Core")
{
Console.WriteLine($"{DateTime.Now} {message}");
}
},
level: EventLevel.Verbose);
Mappage sur la journalisation ASP.NET Core
Le service AzureEventSourceLogForwarder vous permet d’utiliser la configuration de journalisation standard ASP.NET Core pour la journalisation. Le service transfère les messages de journal des sources d’événements du SDK Azure à ILoggerFactory.
Le tableau suivant montre comment le EventLevel
du SDK Azure pour .NET est mappé au LogLevel
ASP.NET Core.
Kit de développement logiciel (SDK) Azure EventLevel |
ASP.NET Core LogLevel |
---|---|
Critical |
Critical |
Error |
Error |
Informational |
Information |
Warning |
Warning |
Verbose |
Debug |
LogAlways |
Information |
Journalisation avec inscription du client
À l’aide de la bibliothèque Azure Service Bus comme exemple, effectuez les étapes suivantes :
Installez le package NuGet Microsoft.Extensions.Azure :
dotnet add package Microsoft.Extensions.Azure
Dans Program.cs, inscrivez le client de la bibliothèque SDK Azure via un appel à la méthode d’extension AddAzureClients :
using Azure.Identity; using Microsoft.Extensions.Azure; // code omitted for brevity builder.Services.AddAzureClients(azureBuilder => { azureBuilder.AddServiceBusClient( builder.Configuration.GetConnectionString("ServiceBus")); azureBuilder.UseCredential(new DefaultAzureCredential()); });
Dans l’exemple précédent, la méthode
AddAzureClients
:- Inscrit les objets suivants auprès du conteneur d’injection de dépendances :
- Service de redirecteur de journaux
- Client Azure Service Bus
- Définit les informations d’identification de jeton par défaut à utiliser pour tous les clients inscrits.
- Inscrit les objets suivants auprès du conteneur d’injection de dépendances :
Dans appsettings.json, modifiez le niveau de journal par défaut de la bibliothèque Service Bus. Par exemple, basculez-le sur
Debug
en définissant la cléLogging:LogLevel:Azure.Messaging.ServiceBus
comme suit :{ "ConnectionStrings": { "ServiceBus": "<connection_string>" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Azure.Messaging.ServiceBus": "Debug" } }, "AllowedHosts": "*" }
Étant donné que la clé
Logging:LogLevel:Azure.Messaging.ServiceBus
est définie surDebug
, les événements du client Service Bus jusqu’àEventLevel.Verbose
seront consignés.
Journalisation sans inscription du client
Il existe des scénarios dans lesquels l’inscription du client d’une bibliothèque SDK Azure auprès du conteneur DI est impossible ou inutile :
- La bibliothèque du SDK Azure n’inclut pas de méthode d’extension
IServiceCollection
pour inscrire un client dans le conteneur DI. - Votre application utilise des bibliothèques d’extensions Azure qui dépendent d’autres bibliothèques du SDK Azure. Voici quelques exemples de bibliothèques d’extensions Azure :
Dans ces scénarios, effectuez les étapes suivantes :
Installez le package NuGet Microsoft.Extensions.Azure :
dotnet add package Microsoft.Extensions.Azure
Dans Program.cs, inscrivez le service de redirecteur de journaux en tant que singleton dans le conteneur DI :
using Azure.Identity; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.Azure; using Microsoft.Extensions.DependencyInjection.Extensions; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.TryAddSingleton<AzureEventSourceLogForwarder>(); builder.Services.AddDataProtection() .PersistKeysToAzureBlobStorage("<connection_string>", "<container_name>", "keys.xml") .ProtectKeysWithAzureKeyVault(new Uri("<uri>"), new DefaultAzureCredential());
Récupérez le service de redirecteur de journaux à partir du conteneur DI et appelez sa méthode Start. Par exemple, l’utilisation de l’injection de constructeur dans une classe de modèle de page Razor Pages ASP.NET Core :
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Azure; public class IndexModel : PageModel { public IndexModel(AzureEventSourceLogForwarder logForwarder) => logForwarder.Start();
Dans appsettings.json, modifiez le niveau de journal par défaut de la bibliothèque Azure Core. Par exemple, basculez-le sur
Debug
en définissant la cléLogging:LogLevel:Azure.Core
comme suit :{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Azure.Core": "Debug" } }, "AllowedHosts": "*" }
Étant donné que la clé
Logging:LogLevel:Azure.Core
est définie surDebug
, les événements de bibliothèque Azure Core jusqu’àEventLevel.Verbose
sont consignés.
Pour plus d’informations, consultez Journalisation dans .NET Core et ASP.NET Core.
Journaliser en utilisant Azure.Monitor.OpenTelemetry.AspNetCore
La distribution OpenTelemetry Azure Monitor, à partir de la version 1.2.0
, prend en charge la capture des journaux provenant des bibliothèques de client Azure. Vous pouvez contrôler la journalisation en utilisant une des options de configuration décrites dans Journalisation dans .NET Core et ASP.NET Core.
À l’aide de la bibliothèque Azure Service Bus comme exemple, effectuez les étapes suivantes :
Installez le package NuGet Azure.Monitor.OpenTelemetry.AspNetCore :
dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
Créez ou inscrivez le client de la bibliothèque. La distribution prend en charge les deux cas.
await using var client = new ServiceBusClient("<connection_string>");
Dans appsettings.json, modifiez le niveau de journal par défaut de la bibliothèque Service Bus. Par exemple, basculez-le sur
Debug
en définissant la cléLogging:LogLevel:Azure.Messaging.ServiceBus
comme suit :{ "ConnectionStrings": { "ServiceBus": "<connection_string>" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Azure.Messaging.ServiceBus": "Debug" } }, "AllowedHosts": "*" }
Étant donné que la clé
Logging:LogLevel:Azure.Messaging.ServiceBus
est définie surDebug
, les événements du client Service Bus jusqu’àEventLevel.Verbose
seront consignés.
Journaliser les corps de requête et de réponse HTTP
Remarque
Cette fonctionnalité s’applique uniquement aux bibliothèques utilisant HTTP pour communiquer avec un service Azure. Les bibliothèques basées sur d’autres protocoles, comme AMQP, ne prennent pas en charge la journalisation du contenu. Les exemples non pris en charge sont notamment les bibliothèques pour les services Azure comme Event Hubs, Service Bus et Web PubSub.
Lors de la résolution des problèmes de comportement inattendu avec une bibliothèque cliente, il est utile d’inspecter les éléments suivants :
- Corps de la requête HTTP envoyé à l’API REST du service Azure sous-jacent.
- Corps de réponse HTTP reçu de l’API REST du service Azure.
Par défaut, la journalisation du contenu susmentionné est désactivée. Pour activer la journalisation des corps de requête et de réponse HTTP, procédez comme suit :
Définissez la propriété IsLoggingContentEnabled de l’objet options du client sur
true
et passez l’objet options au constructeur du client. Par exemple, pour journaliser les requêtes et les réponses HTTP pour la bibliothèque de secrets Azure Key Vault :var clientOptions = new SecretClientOptions { Diagnostics = { IsLoggingContentEnabled = true, } }; var client = new SecretClient( new Uri("https://<keyvaultname>.vault.azure.net/"), new DefaultAzureCredential(), clientOptions);
Utilisez votre approche de journalisation préférée avec un niveau événement/journal détaillé/débogage ou supérieur. Recherchez votre approche dans le tableau suivant pour obtenir des instructions spécifiques.
Approche Instructions Activer la journalisation avec les méthodes intégrées Passez EventLevel.Verbose
ouEventLevel.LogAlways
àAzureEventSourceListener.CreateConsoleLogger
ouAzureEventSourceListener.CreateTraceLogger
Configurer la journalisation personnalisée Définissez le paramètre de constructeur level
de la classeAzureEventSourceListener
surEventLevel.Verbose
ouEventLevel.LogAlways
Mappage sur la journalisation ASP.NET Core Ajoutez "Azure.Core": "Debug"
à appsettings.json
Étapes suivantes
- Activer la journalisation des diagnostics pour les applications dans Azure App Service
- Passez en revue les options d’Audit et journalisation de la sécurité Azure
- Apprendre à utiliser les journaux de plateforme Azure
- En savoir plus sur la journalisation et le suivi .NET