Udostępnij za pośrednictwem


Omówienie rejestrowania i przechwytywania

Program Entity Framework Core (EF Core) zawiera kilka mechanizmów generowania dzienników, reagowania na zdarzenia i uzyskiwania diagnostyki. Każdy z nich jest dostosowany do różnych sytuacji i ważne jest, aby wybrać najlepszy mechanizm dla danego zadania, nawet wtedy, gdy mogłoby się sprawdzić wiele mechanizmów. Na przykład do rejestrowania kodu SQL może być używany interceptor bazy danych, ale jest to lepiej obsługiwane przez jeden z mechanizmów dostosowanych do rejestrowania. Na tej stronie przedstawiono omówienie każdego z tych mechanizmów i opisano, kiedy należy ich używać.

Krótki przewodnik

Poniższa tabela zawiera szybkie zestawienie różnic między opisanymi tutaj mechanizmami.

Mechanizm Async Scope Zarejestrowano Przeznaczenie
Rejestrowanie proste Nie. Na kontekst Konfiguracja kontekstu Rejestrowanie w czasie programowania
Microsoft.Extensions.Logging Nie. Na kontekst* Wstrzykiwanie zależności lub konfiguracja kontekstu Rejestrowanie produkcyjne
Wydarzenia Nie. Na kontekst Dowolny czas Reagowanie na zdarzenia EF
Interceptory Tak Na kontekst Konfiguracja kontekstu Manipulowanie operacjami EF
Odbiorniki diagnostyczne Nie. Przetwórz Globalnie Diagnostyka aplikacji

*Zazwyczaj mechanizm Microsoft.Extensions.Logging jest konfigurowany dla poszczególnych aplikacji za pośrednictwem wstrzykiwania zależności. Jednak na poziomie programu EF w razie potrzeby można skonfigurować każdy kontekst za pomocą innego rejestratora.

Rejestrowanie proste

Dostęp do dzienników programu EF Core można uzyskać z dowolnego typu aplikacji przy użyciu polecenia LogTo podczas konfigurowania wystąpienia obiektu DbContext. Ta konfiguracja jest często wykonywana w ramach przesłonięcia elementu DbContext.OnConfiguring. Przykład:

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

Ta koncepcja jest podobna do elementu Database.Log w programie EF6.

Aby uzyskać więcej informacji, zobacz Rejestrowanie proste.

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging to rozszerzalny mechanizm rejestrowania z dostawcami wtyczek dla wielu typowych systemów rejestrowania. Program EF Core w pełni integruje się z mechanizmem Microsoft.Extensions.Logging i ta forma rejestrowania jest używana domyślnie w przypadku aplikacji platformy ASP.NET Core.

Aby uzyskać więcej informacji, zobacz Używanie mechanizmu Microsoft.Extensions.Logging w programie EF Core.

Wydarzenia

Program EF Core uwidacznia zdarzenia platformy .NET, które działają jako wywołania zwrotne w razie wystąpienia pewnych zdarzeń w kodzie programu EF Core. Zdarzenia są prostsze niż interceptory i umożliwiają bardziej elastyczną rejestrację. Jednak są one tylko do synchronizacji, dlatego nie mogą wykonywać nieblokujących asynchronicznych operacji we/wy.

Zdarzenia są rejestrowane dla poszczególnych wystąpień obiektu DbContext i tę rejestrację można wykonać w dowolnym momencie. Użyj odbiornika diagnostycznego, aby uzyskać te same informacje ale dla wszystkich wystąpień obiektu DbContext w procesie.

Aby uzyskać więcej informacji, zobacz Zdarzenia platformy .NET w programie EF Core.

Przechwytywanie

Interceptory programu EF Core umożliwiają przechwytywanie, modyfikowanie i/lub pomijanie operacji programu EF Core. Obejmuje to operacje bazy danych niskiego poziomu, takie jak wykonywanie polecenia, a także operacje wyższego poziomu, takie jak wywołania do funkcji SaveChanges.

Interceptory różnią się od rejestrowania i diagnostyki tym, że umożliwiają modyfikowanie lub pomijanie przechwyconej operacji. Rejestrowanie proste lub Microsoft.Extensions.Logging to lepsze opcje do wyboru na potrzeby rejestrowania.

Interceptory są rejestrowane dla poszczególnych wystąpień obiektu DbContext podczas konfigurowania kontekstu. Użyj odbiornika diagnostycznego, aby uzyskać te same informacje ale dla wszystkich wystąpień obiektu DbContext w procesie.

Aby uzyskać więcej informacji, zobacz Przechwytywanie.

Odbiorniki diagnostyczne

Odbiorniki diagnostyczne umożliwiają nasłuchiwanie dowolnego zdarzenia programu EF Core, które występuje w bieżącym procesie platformy .NET.

Odbiorniki diagnostyczne nie są odpowiednie do pobierania zdarzeń z pojedynczego wystąpienia obiektu DbContext. Interceptory programu EF Core zapewniają dostęp do tych samych zdarzeń przy rejestracji dla poszczególnych kontekstów.

Odbiorniki diagnostyczne nie są przeznaczone do rejestrowania. Rejestrowanie proste lub Microsoft.Extensions.Logging to lepsze opcje do wyboru na potrzeby rejestrowania.

Aby uzyskać więcej informacji, zobacz Używanie odbiorników diagnostycznych w programie EF Core.