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.