Přehled protokolování a zachycení

Entity Framework Core (EF Core) obsahuje několik mechanismů pro generování protokolů, reagování na události a získávání diagnostiky. Každá z těchto možností je přizpůsobená různým situacím a je důležité vybrat nejlepší mechanismus pro úkol, i když může fungovat více mechanismů. Například se k protokolování SQL dá použít databázový interceptor, ale je lepší to zpracovat jedním z mechanismů určených pro protokolování. Tato stránka obsahuje přehled jednotlivých mechanismů a popisuje, kdy se mají použít.

Stručná referenční dokumentace

Následující tabulka obsahuje stručný přehled rozdílů mezi zde popsanými mechanismy.

Mechanismus Async Scope Registrováno Zamýšlené použití
Jednoduché protokolování Ne Podle kontextu Konfigurace kontextu Protokolování během vývoje
Microsoft.Extensions.Logging Ne Podle kontextu* Konfigurace D.I. nebo kontextu Protokolování v produkčním prostředí
Events Ne Podle kontextu Kdykoliv Reakce na události EF
Interceptors Ano Podle kontextu Konfigurace kontextu Manipulace s operacemi EF
Diagnostické posluchače Ne Zpracovat Globálně Diagnostika aplikací

Microsoft.Extensions.Logging*Obvykle se konfiguruje pro jednotlivé aplikace prostřednictvím injektáže závislostí. Na úrovni EF je ale možné nakonfigurovat každý kontext s jiným protokolovacím nástrojem v případě potřeby.

Jednoduché protokolování

Protokoly EF Core lze zpřístupnit z jakéhokoli typu aplikace pomocí LogTo při konfiguraci instance DbContext. Tato konfigurace se obvykle provádí pomocí přepsání DbContext.OnConfiguring. Například:

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

Tento koncept se podobá Database.Log v EF6.

Další informace najdete v tématu Jednoduché protokolování .

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging je rozšiřitelný mechanismus protokolování s poskytovateli modulů plug-in pro mnoho běžných systémů protokolování. EF Core se plně integruje s Microsoft.Extensions.Logging a tato forma protokolování se ve výchozím nastavení používá pro aplikace ASP.NET Core.

Další informace najdete v tématu Použití microsoft.Extensions.Logging v EF Core .

Events

EF Core zveřejňuje události .NET, které fungují jako zpětná volání, když v kódu EF Core dojde k určitým událostem. Události jsou jednodušší než zachytávače a umožňují flexibilnější registraci. Jsou však pouze synchronní, a proto nemohou provádět neblokující asynchronní vstupně-výstupní operace.

Události se registrují na instanci DbContext a tuto registraci je možné provést kdykoli. Pomocí diagnostického posluchače získejte stejné informace, ale pro všechny instance DbContext v procesu.

Další informace najdete v tématu Události .NET v EF Core .

Zachytávání

Průsečíky EF Core umožňují zachytit, upravit a/nebo potlačení operací EF Core. To zahrnuje databázové operace nízké úrovně, jako je spuštění příkazu, a také operace vyšší úrovně, jako jsou volání SaveChanges.

Průsečíky se liší od protokolování a diagnostiky v tom, že umožňují úpravy nebo potlačení zachycené operace. Jednoduché protokolování nebo Microsoft.Extensions.Logging jsou lepší volbou pro protokolování.

Zachytávače jsou registrovány pro každou instanci DbContext při konfiguraci kontextu. Pomocí diagnostického posluchače získejte stejné informace, ale pro všechny instance DbContext v procesu.

Další informace najdete v tématu Interception .

Diagnostické posluchače

Diagnostické naslouchací objekty umožňují sledovat všechny události EF Core, které jsou zaznamenány v aktuálním procesu .NET.

Diagnostické naslouchací čtečky nejsou vhodné pro příjem událostí z jedné instance DbContext. Průsečíky EF Core poskytují přístup ke stejným událostem s registrací podle kontextu.

Diagnostické naslouchání nejsou určeny k protokolování. Jednoduché protokolování nebo Microsoft.Extensions.Logging jsou lepší volbou pro protokolování.

Podrobnosti najdete o použití diagnostických listenerů v EF Core.