Vue d’ensemble de la journalisation et de l’interception

Entity Framework Core (EF Core) contient plusieurs mécanismes permettant de générer des journaux, de répondre aux événements et d’obtenir des diagnostics. Chaque méthode est adaptée à différentes situations. Il est important de sélectionner la meilleure pour la tâche en question, même quand plusieurs mécanismes peuvent fonctionner. Un intercepteur de base de données peut par exemple être utilisé pour journaliser SQL. Toutefois, cette opération est mieux gérée par l’un des mécanismes adaptés à la journalisation. Cette page présente une vue d’ensemble de ces mécanismes et décrit quand les utiliser.

Aide-mémoire

Le tableau ci-dessous fournit une référence rapide pour les différences entre les mécanismes décrits ici.

Mécanisme Asynchrone Portée Enregistré Utilisation prévue
Journalisation simple Non Par contexte Configuration contextuelle Journalisation au moment du développement
Microsoft.Extensions.Logging Non Par contexte* Injection de dépendances ou configuration contextuelle Journalisation de production
Événements Non Par contexte à tout moment Réaction aux événements EF
Intercepteurs Oui Par contexte Configuration contextuelle Manipulation d’opérations EF
Écouteurs de diagnostic Non Traiter Globalement Diagnostic d'application

*En règle générale, Microsoft.Extensions.Logging est configuré par application via l’injection de dépendances. Toutefois, au niveau EF, chaque contexte peut être configuré avec un autre enregistreur d’événements si nécessaire.

Journalisation simple

Les journaux EF Core sont accessibles à partir de n’importe quel type d’application à l’aide de LogTo lors de la configuration d’une instance DbContext. Cette configuration est généralement effectuée en remplaçant DbContext.OnConfiguring. Par exemple :

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.LogTo(Console.WriteLine);

Ce concept est similaire à Database.Log dans EF6.

Pour plus d’informations, consultez Journalisation simple.

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging est un mécanisme de journalisation extensible avec des fournisseurs de plug-ins pour de nombreux systèmes de journalisation courants. EF Core s’intègre entièrement à Microsoft.Extensions.Logging. Ce type de journalisation est utilisée par défaut pour les applications ASP.NET Core.

Pour plus d’informations, consultez Utilisation de Microsoft.Extensions.Logging dans EF Core.

Événements

EF Core expose les Événements .NET pour agir en tant que rappels quand certains événements se produisent dans le code EF Core. Les événements sont plus simples que les intercepteurs et permettent une inscription plus flexible. Toutefois, ils sont synchronisés uniquement et ne peuvent donc pas effectuer d’E/S asynchrones non bloquantes.

Les événements sont enregistrés par instance DbContext et cette inscription peut être effectuée à tout moment. Utilisez un écouteur de diagnostic pour obtenir les mêmes informations, mais pour l’ensemble des instances DbContext dans le processus.

Pour plus d’informations, consultez Événements .NET dans EF Core.

Interception

Les intercepteurs EF Core permettent l’interception, la modification et/ou la suppression des opérations EF Core. Cela inclut des opérations de base de données de bas niveau, comme l’exécution d’une commande, ainsi que des opérations de niveau élevé, comme les appels à SaveChanges.

Les intercepteurs sont différents de la journalisation et des diagnostics, car ils autorisent la modification ou la suppression de l’opération interceptée. La journalisation simple ou Microsoft.Extensions.Logging constitue une meilleure option pour la journalisation.

Les intercepteurs sont inscrits par instance DbContext quand le contexte est configuré. Utilisez un écouteur de diagnostic pour obtenir les mêmes informations, mais pour l’ensemble des instances DbContext dans le processus.

Pour plus d’informations, consultez Interception.

Écouteurs de diagnostic

Les écouteurs de diagnostic permettent d’écouter n’importe quel événement EF Core qui se produit dans le processus .NET actuel.

Les écouteurs de diagnostic ne conviennent pas à l’obtention d’événements à partir d’une instance DbContext unique. Les intercepteurs EF Core fournissent l’accès aux mêmes événements avec l’inscription par contexte.

Les écouteurs de diagnostic ne sont pas conçus pour la journalisation. La journalisation simple ou Microsoft.Extensions.Logging constitue une meilleure option pour la journalisation.

Pour plus d’informations, consultez Utilisation d’écouteurs de diagnostic dans EF Core.