Přehled protokolování a zachytávání

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 nich je přizpůsobený jiným situacím a je důležité vybrat nejlepší mechanismus pro daný úkol, i když by mohlo fungovat více mechanismů. Například k protokolování SQL se sice dá použít databázový zachytávač, ale je lepší ho zpracovat některým z mechanismů přizpůsobených protokolování. Tato stránka obsahuje přehled těchto mechanismů a popisuje, kdy se mají jednotlivé mechanismy používat.

Stručná referenční příručka

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

Mechanismus Async Scope Registrováno Zamýšlený účel
Jednoduché protokolování Číslo Podle kontextu Konfigurace v kontextu Protokolování v době vývoje
Microsoft.Extensions.Logging Číslo Podle kontextu* D.I. nebo konfigurace v kontextu Protokolování v produkčním prostředí
Události Číslo Podle kontextu Kdykoli Reakce na události EF
Zachycovače Ano Podle kontextu Konfigurace v kontextu Manipulace s operacemi EF
Diagnostické naslouchací procesy Číslo Proces Globálně Diagnostika aplikací

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

Jednoduché protokolování

K protokolům EF Core je možné přistupovat z libovolného typu aplikace prostřednictvím LogTo při konfiguraci instance DbContextu. Tato konfigurace se běžně provádí přepsáním DbContext.OnConfiguring. Pří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 řadu běžných protokolovacích systémů. 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 věnovaném použití Microsoft.Extensions.Logging v EF Core.

Události

EF Core zveřejňuje události .NET, které fungují jako zpětná volání, když se v kódu EF Core dějí určité věci. Události jsou jednodušší než zachytávače a umožňují flexibilnější registraci. Jsou ale jenom synchronní, takže nemohou provádět neblokující asynchronní I/O.

Události se registrují pro každou instanci DbContextu a tuto registraci lze provést kdykoli. Pomocí diagnostického naslouchacího procesu můžete získat stejné informace, ale pro všechny instance DbContextu v rámci tohoto procesu.

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

Zachytávání

Zachytávače EF Core umožňují zachytávání, úpravy 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.

Zachytávače se liší od protokolování a diagnostiky v tom, že umožňují úpravu nebo potlačení zachycované operace. K protokolování je vhodnější použít jednoduché protokolování nebo Microsoft.Extensions.Logging.

Zachytávače se zaregistrují pro jednotlivé instance DbContextu při konfiguraci kontextu. Pomocí diagnostického naslouchacího procesu můžete získat stejné informace, ale pro všechny instance DbContextu v rámci tohoto procesu.

Další informace najdete v tématu věnovaném zachytávání.

Diagnostické naslouchací procesy

Diagnostické naslouchací procesy umožňují naslouchat všem událostem EF Core, ke kterým dochází v aktuálním procesu .NET.

Diagnostické naslouchací procesy nejsou vhodné pro získávání událostí z jedné instance DbContextu. Zachytávače EF Core poskytují přístup ke stejným událostem s registrací podle kontextu.

Diagnostické naslouchací procesy nejsou navržené pro protokolování. K protokolování je vhodnější použít jednoduché protokolování nebo Microsoft.Extensions.Logging.

Další informace najdete v tématu věnovaném použití diagnostických naslouchacích procesů v EF Core.