Übersicht über Protokollierung und AbfangfunktionenOverview of Logging and Interception

Entity Framework Core (EF Core) enthält mehrere Mechanismen für das Erstellen von Protokollen, Reagieren auf Ereignisse und Erstellen von Diagnosen.Entity Framework Core (EF Core) contains several mechanisms for generating logs, responding to events, and obtaining diagnostics. Diese Mechanismen sind jeweils auf verschiedene Situationen zugeschnitten, und es ist wichtig, den besten Mechanismus für die betreffende Aufgabe auszuwählen, auch wenn mehrere Mechanismen möglich wären.Each of these is tailored to different situations, and it is important to select the best mechanism for the task in hand, even when multiple mechanisms could work. Ein Datenbankinterceptor könnte beispielsweise für eine SQL-Protokollierung verwendet werden. Besser hierfür eignen sich jedoch protokollierungsspezifische Mechanismen.For example, a database interceptor could be used to log SQL, but this is better handled by one of the mechanisms tailored to logging. Auf dieser Seite finden Sie eine Übersicht der verschiedenen Mechanismen sowie Erläuterungen, wann die einzelnen verwendet werden sollten.This page presents an overview of each of these mechanisms and describes when each should be used.

KurzreferenzQuick reference

In der folgenden Tabelle finden Sie eine kurze Übersicht über die Unterschiede zwischen den hier beschriebenen Mechanismen.The table below provides a quick reference for the differences between the mechanisms described here.

MechanismusMechanism AsyncAsync ScopeScope RegistriertRegistered Beabsichtigte VerwendungIntended use
Einfache ProtokollierungSimple Logging NeinNo Pro KontextPer context Kontextbezogene KonfigurationContext configuration Protokollierung zur EntwicklungszeitDevelopment-time logging
Microsoft.Extensions.LoggingMicrosoft.Extensions.Logging NeinNo Pro Kontext*Per context* AbhängigkeitsinjektionD.I. oder kontextbezogene Konfigurationor context configuration ProduktionsprotokollierungProduction logging
EreignisseEvents NeinNo Pro KontextPer context Beliebiger ZeitpunktAny time Reagieren auf EF-EreignisseReacting to EF events
InterceptorsInterceptors JaYes Pro KontextPer context Kontextbezogene KonfigurationContext configuration Manipulieren von EF-VorgängenManipulating EF operations
DiagnoselistenerDiagnostics listeners NeinNo ProzessProcess GlobalGlobally AnwendungsdiagnoseApplication diagnostics

*Microsoft.Extensions.Logging wird in der Regel pro Anwendung über Abhängigkeitsinjektion konfiguriert. Auf der EF-Ebene kann jedoch jeder Kontext bei Bedarf mit einer anderen Protokollierung konfiguriert werden.*Typically Microsoft.Extensions.Logging is configured per-application via dependency injection However, at the EF level, each context can be configured with a different logger if needed.

Einfache ProtokollierungSimple logging

Hinweis

Dieses Feature wurde in EF Core 5.0 eingeführt.This feature was introduced in EF Core 5.0.

Beim Konfigurieren einer DbContext-Instanz kann von jedem Anwendungstyp aus mithilfe von LogTo auf EF Core-Protokolle zugegriffen werden.EF Core logs can be accessed from any type of application through the use of LogTo when configuring a DbContext instance. Diese Konfiguration erfolgt in der Regel durch ein Überschreiben von DbContext.OnConfiguring.This configuration is commonly done in an override of DbContext.OnConfiguring. Beispiel:For example:

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

Dieses Konzept ähnelt Database.Log in EF6.This concept is similar to Database.Log in EF6.

Weitere Informationen finden Sie unter Einfache Protokollierung.See Simple Logging for more information.

Microsoft.Extensions.LoggingMicrosoft.Extensions.Logging

Microsoft.Extensions.Logging ist ein erweiterbarer Protokollierungsmechanismus mit Plug-In-Anbietern für viele gängige Protokollierungssysteme.Microsoft.Extensions.Logging is an extensible logging mechanism with plug-in providers for many common logging systems. EF Core ist vollständig in Microsoft.Extensions.Logging integriert, und diese Art von Protokollierung wird standardmäßig für ASP.NET Core-Anwendungen verwendet.EF Core fully integrates with Microsoft.Extensions.Logging and this form of logging is used by default for ASP.NET Core applications.

Weitere Informationen finden Sie unter Verwenden von Microsoft.Extensions.Logging in EF Core.See Using Microsoft.Extensions.Logging in EF Core for more information.

EreignisseEvents

Hinweis

Zusätzliche Ereignisse wurden in EF Core 5.0 eingeführt.Additional events were introduced in EF Core 5.0.

EF Core stellt .NET-Ereignisse bereit, die als Rückrufe fungieren, wenn bestimmte Dinge im EF Core-Code auftreten.EF Core exposes .NET events to act as callbacks when certain things happen in the EF Core code. Ereignisse sind einfacher als Abfangfunktionen und ermöglichen eine flexiblere Registrierung.Events are simpler than interceptors and allow more flexible registration. Sie sind jedoch nur synchron und können daher keine nicht blockierenden asynchronen E/A-Vorgänge durchführen.However, they are sync only and so cannot perform non-blocking async I/O.

Ereignisse werden pro DbContext-Instanz registriert, und diese Registrierung kann zu einem beliebigen Zeitpunkt durchgeführt werden.Events are registered per DbContext instance and this registration can be done at any time. Verwenden Sie einen Diagnoselistener, um dieselben Informationen abzurufen, jedoch für alle DbContext-Instanzen im Prozess.Use a diagnostic listener to get the same information but for all DbContext instances in the process.

Weitere Informationen finden Sie unter .NET-Ereignisse in EF Core.See .NET Events in EF Core for more information.

InterceptionInterception

Hinweis

Dieses Feature wurde in EF Core 3.0 eingeführt.This feature was introduced in EF Core 3.0. In EF Core 5.0 wurden weitere Abfangfunktionen (Interceptors) eingeführt.Additional interceptors were introduced in EF Core 5.0.

EF Core-Abfangfunktionen ermöglichen das Abfangen, Ändern und/oder Unterdrücken von EF Core-Vorgängen.EF Core interceptors enable interception, modification, and/or suppression of EF Core operations. Dies umfasst Datenbankvorgänge auf niedriger Ebene, z. B. das Ausführen eines Befehls, sowie Vorgänge höherer Ebene, z. B. Aufrufe von SaveChanges.This includes low-level database operations such as executing a command, as well as higher-level operations, such as calls to SaveChanges.

Abfangfunktionen unterscheiden sich von Protokollierung und Diagnose insofern, als sie eine Änderung oder Unterdrückung des abzufangenden Vorgangs ermöglichen.Interceptors are different from logging and diagnostics in that they allow modification or suppression of the operation being intercepted. Einfache Protokollierung oder Microsoft.Extensions.Logging sind bessere Optionen für Protokollierung.Simple logging or Microsoft.Extensions.Logging are better choices for logging.

Abfangfunktionen werden pro DbContext-Instanz registriert, wenn der Kontext konfiguriert wird.Interceptors are registered per DbContext instance when the context is configured. Verwenden Sie einen Diagnoselistener, um dieselben Informationen abzurufen, jedoch für alle DbContext-Instanzen im Prozess.Use a diagnostic listener to get the same information but for all DbContext instances in the process.

Weitere Informationen finden Sie unter Abfangfunktionen.See Interception for more information.

DiagnoselistenerDiagnostic listeners

Diagnoselistener ermöglichen das Lauschen auf EF Core-Ereignisse, die im aktuellen .NET-Prozess auftreten.Diagnostic listeners allow listening for any EF Core event that occurs in the current .NET process.

Diagnoselistener sind nicht geeignet, um Ereignisse aus einer einzelnen DbContext-Instanz abzurufen.Diagnostic listeners are not suitable for getting events from a single DbContext instance. EF Core-Abfangfunktionen ermöglichen Zugriff auf dieselben Ereignisse mit Pro-Kontext-Registrierung.EF Core interceptors provide access to the same events with per-context registration.

Diagnoselistener sind nicht für Protokollierung konzipiert.Diagnostic listeners are not designed for logging. Einfache Protokollierung oder Microsoft.Extensions.Logging sind bessere Optionen für Protokollierung.Simple logging or Microsoft.Extensions.Logging are better choices for logging.

Weitere Informationen finden Sie unter Verwenden von Diagnoselistenern in EF Core.See Using diagnostic listeners in EF Core for more information.